Add an “autocomplete” helper to Laravel Builder

XMLWordPrintableJSON

    • Type: New Feature
    • Resolution: Fixed
    • Priority: Minor - P4
    • 5.2.0
    • Affects Version/s: None
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Autocompletion is a common use-case for the search engine. The following method will be added to MongoDB\Laravel\Query\Builder:

       

      class Builder {
          /**
           * @param bool|array{maxEdits?:int, prefixLength?:int, maxExpansions?:int} $fuzzy
           * @return string[]
           */
          function autocomplete(string $fieldPath, string $query, int $limit = 20, bool|array $fuzzy = false, bool $sequential = false, string $index = 'default'): array;
      }
      

       

      This method uses the autocomplete operator and returns a list of suggested strings.

      $sequential is a boolean that translates tokenOrder = any|sequential.

       

      This method can be used on any DocumentModel class

       

      Movie::autocomplete('title', 'fam')
      // return ['The Family That Preys', 'My Family and Other Animals', ...]
      

       

      Runs the following aggregation:

       

      [
        {
          $search: {
            autocomplete: {
              query:'fam',
              path:'title',
            }
          }
        },
        {
          $project: {
            title: 1
          }
        }
      ]
      

       

      color: Color value is invalid

      If there is no search index on the given collection, no results are returned.

      We will not add a helper to create an “autocompletion” index. Relying on the documentation to create indexes with more use-cases.

       

      {
        "mappings": {
          "dynamic": false,
          "fields": {
            "title": {
              "foldDiacritics": true,
              "maxGrams": 15,
              "minGrams": 2,
              "tokenization": "edgeGram",
              "type": "autocomplete"
            }
          }
        }
      }
      

       

       

              Assignee:
              Jérôme Tamarelle
              Reporter:
              Jérôme Tamarelle
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: