3

I have a MongoDB Atlas Search index with the autocomplete type on a field name and the following attributes :

maxGrams : 15
minGrams : 2
tokenization: edgeGram
fold diacritics: true

The collection contains the following names :

The American
The American Equity Underwriters
The American Prairie Foundation
The American Conservatory Theater
The American Club

With this autocomplete query :

{
  autocomplete: {
    query: 'The American',
    path: 'name'
  }
}

I'm able to retrieve all the names above with the following searchScore :

The American Conservatory Theater -> 15.474836349487305
The American Equity Underwriters -> 15.379003524780273
The American Prairie Foundation -> 15.379003524780273
The American Club -> 15.271049499511719
The American -> 13.68109130859375

Even if The America is the exact match it gets a lower score.

Why does the exact match searchScore is below the others ?

Doug
  • 14,387
  • 17
  • 74
  • 104

1 Answers1

5

As a workaround I found something like:

{
  "compound": { 
    "should": [
      {
      "phrase": {
        "query": "The American", 
        "path": "name", 
        "score": { "boost": {"value": 5}}
      }},
    {
      "autocomplete": { 
        "query": "The American",
        "path": "name"}
    }
    ]
  }
}

The score boost on the phrase match will handle exact match and make the exact match score higher than others.

  • What does your index definition look like? Do you have a multi analyzer where name is indexed with Keyword and Autocomplete? – Nice-Guy Apr 16 '21 at 14:21
  • Yes, name is indexed with "String" and "Autocomplete" datatype. – Jonathan Wadin Apr 17 '21 at 17:55
  • @JonathanWadin, indexed with *both* 'string' and 'autocomplete'? My understanding is that an Atlas Search index field can only have a single 'type'? I'd love to be wrong about this, because exact match ('phrase') does not work for me on 'autocomplete' fields. Thanks! – drone1 Feb 11 '22 at 01:27
  • Aha! Answered my own question: You can index a field in multiple ways like this: "someField": [{ /* <-- ARRAY */ type: "autocomplete", }, { type: "string" }] – drone1 Feb 11 '22 at 11:39