I'm trying to make an autocomplete search that will account for special characters and add weights to the results which match a query with these characters.
Index:
{
"institution_test":{
"settings":{
"index":{
"analysis":{
"filter":{
"autocomplete_filter":{
"type":"ngram",
"min_gram":"2",
"max_gram":"14"
}
},
"analyzer":{
"autocomplete":{
"type":"custom",
"filter":[
"lowercase",
"asciifolding",
"autocomplete_filter"
],
"tokenizer":"whitespace"
}
}
}
}
}
}
}
Mapping:
{
"institution_test":{
"mappings":{
"default":{
"properties":{
"local_name":{
"type":"text",
"copy_to":[
"search_by_name"
],
"analyzer":"autocomplete",
"search_analyzer":"standard"
},
"name":{
"type":"text",
"copy_to":[
"search_by_name"
],
"analyzer":"autocomplete",
"search_analyzer":"standard"
},
"search_by_name":{
"type":"text",
"analyzer":"autocomplete",
"search_analyzer":"standard"
}
}
}
}
}
}
Documents:
[
{
"name":"Adam SMITH"
},
{
"name":"Abd MIT Abd"
},
{
"name":"Massachusetts (MIT)"
},
{
"name":"MI TOO"
}
]
Task: to pull up rows which contain (MIT), next MIT as a separate word, next partial matches.
Search query:
http://localhost:9200/institution_test/_search?q=search_by_name:\(mit\)
Results (some useless fields removed):
"hits":[
{
"_score":0.5691198,
"_source":{
"name":"Adam SMITH"
}
},
{
"_score":0.5691198,
"_source":{
"name":"Massachusetts (MIT)"
}
},
{
"_score":0.55140024,
"_source":{
"name":"Abd MIT Abd"
}
}
]
Why Adam SMITH which is a partial match has the highest position? Why it has the weight identical to the second row?
How to make the results as follows and all rows have different weights?
Massachusetts (MIT)Abd MIT AbdAdam SMITH
Thanks.