Needs help for name search (Higher score for positions)

Hi

I'm trying to make an autocompletion, who gives higher score for typed word positions. Sorted by score and then name.

My goal:

typing "pet"

result:

peter christensen
peter christian grau
peter christian reumert krogsgaard
peter bruun christensen
anders petersen

typing "peter chr"

result:

peter christensen
peter christian grau
peter christian reumert krogsgaard
peter bruun christensen

Above succeed and I was happy, but then something strange happening, when there are duplicates "peter christensen". Now the result looks like this:

peter christian grau
peter christian reumert krogsgaard
peter christensen
peter christensen
peter bruun christensen

And I want this:

peter christensen
peter christensen
peter christian grau
peter christian reumert krogsgaard
peter bruun christensen

Please help?

Elasticsearch v. 5.5

Settings:

{
    "persons_index": {
        "settings": {
            "index": {
                "number_of_shards": "5",
                "provided_name": "persons_index",
                "creation_date": "1499881803116",
                "analysis": {
                    "filter": {
                        "ascii_folding_preserve_original": {
                            "type": "asciifolding",
                            "preserve_original": "true"
                        },
                        "names_synonym_filter": {
                            "type": "synonym",
                            "synonyms": [
                                "aage,åge",
                                "gaard,gård"
                            ]
                        }
                    },
                    "analyzer": {
                        "my_analyzer": {
                            "filter": [
                                "lowercase",
                                "trim",
                                "names_synonym_filter",
                                "ascii_folding_preserve_original"
                            ],
                            "type": "custom",
                            "tokenizer": "standard"
                        }
                    }
                },
                "number_of_replicas": "1",
                "uuid": "LxMHLha-R02i__S7gDWBtA",
                "version": {
                    "created": "5050099"
                }
            }
        }
    }
}

Mapping:

{
    "persons_index": {
        "mappings": {
            "persons_type": {
                "properties": {
                    "fieldDisplayFullName": {
                        "type": "text",
                        "norms": false,
                        "analyzer": "my_analyzer"
                    },
                    "fieldSort": {
                        "type": "text",
                        "norms": false,
                        "analyzer": "keyword",
                        "fielddata": true
                    }
                }
            }
        }
    }
}

Example doc

{"fieldSort" : "peter christensen", "fieldDisplayFullName" : "Peter Christensen"}

Query:

_search?pretty=true&search_type=dfs_query_then_fetch

{
  "explain": false,
  "size" : 50,
  "sort": [
		"_score",
		{
			"fieldSort": {
				"order": "asc"
			}
		}
	],
  "query": {
    "bool" : {
      "must" : {
        "bool" : {
              "minimum_should_match":"2",
              "should" : [
              	{"match" : { "fieldDisplayFullName" : "peter" }},
              	{"wildcard" : { "fieldDisplayFullName" : "chr*" }}
              ]
        }
      },
       "should" : [
	      {"match_phrase_prefix" : { "fieldSort" : {"query" : "peter chr","boost" : 10}}}
	    ]
    }
  }
}

Result:

Peter Christensen (_score: 18.968887)
Peter Christian Engelhardt (_score: 18.968887)
Peter Christian Grau (_score: 18.968887)
Peter Christian Reumert Krogsgaard (_score: 18.968887)
Peter Christian Vagnbo Jørgensen (_score: 18.968887)
Peter Christoffersen (_score: 18.968887)
Peter Bruun Christensen (_score: 1.0512933)
Peter Dits Christensen (_score: 1.0512933)
Peter Fjeldsø Christensen (_score: 1.0512933)

With duplicates "Peter Christensen (_score: 14.909464)" :confused:

Peter Christian Engelhardt (_score: 20.01772)
Peter Christian Grau (_score: 20.01772)
Peter Christian Reumert Krogsgaard (_score: 20.01772)
Peter Christian Vagnbo Jørgensen (_score: 20.01772)
Peter Christoffersen (_score: 20.01772)
Peter Christensen (_score: 14.909464)
Peter Christensen (_score: 14.909464)
Peter Bruun Christensen (_score: 1.04652)
Peter Dits Christensen (_score: 1.04652)
Peter Fjeldsø Christensen (_score: 1.04652)

Diffrent query attemp with no success: :confused:

{
  "explain": false,
  "size" : 50,
  "sort": [
		"_score",
		{
			"fieldSort": {
				"order": "asc"
			}
		}
	],
  "query": {
    "bool" : {
      "must" : {
        "bool" : {
              "minimum_should_match":"2",
              "should" : [
              	{"match" : { "fieldDisplayFullName" : "peter" }},
              	{"wildcard" : { "fieldDisplayFullName" : "chr*" }}
              ]
        }
      },
       "should" : [
       		{"span_first" : {
		      "match" : {
		          "span_term" : { "fieldDisplayFullName" : "peter" }
		      },
		      "end" : 1,
		      "boost" : 50.0
		    }},
		    {"span_first" : {
		      "match" : {
		          "span_multi":{
		            "match":{
		            	"wildcard" : { "fieldDisplayFullName" : "chr*" }
		            }
		          }
		      },
		      "end" : 2,
		      "boost" : 50.0
		    }}
	    ]
    }
  }
}

Solved with "constant_score"

{
  "explain": false,
  "size" : 50,
  "sort": [
		"_score",
		{
			"fieldSort": {
				"order": "asc"
			}
		}
	],
  "query": {
    "bool" : {
      "must" : {
        "bool" : {
              "minimum_should_match":"2",
              "should" : [
              	{"match" : { "fieldDisplayFullName" : "peter" }},
              	{"wildcard" : { "fieldDisplayFullName" : "chr*" }}
              ]
        }
      },
       "should" : [
       		{ "constant_score": {
        		"boost":   2,
    			"query": {"match_phrase_prefix" : { "fieldSort" : {"query" : "peter chr"}}}
	    	}}
	    ]
    }
  }
}

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.