Добрый день!
Ситуация следующая.
Был следующий индекс:
{
"settings":{
"analysis":{
"analyzer":{
"str_search_analyzer":{
"tokenizer":"keyword",
"filter":["lowercase"]
},
"str_index_analyzer":{
"tokenizer":"keyword",
"filter":["lowercase","substring"]
}
},
"filter":{
"substring": {"type":"nGram", "min_gram":2, "max_gram":25}
}
}
},
"mappings":{
"item":{
"properties":{
"org":{"type":"string", "search_analyzer":"str_search_analyzer", "analyzer":"str_index_analyzer"},
"ind":{"type":"string", "search_analyzer":"str_search_analyzer", "analyzer":"str_index_analyzer"},
"name":{"type":"string", "search_analyzer":"str_search_analyzer", "analyzer":"str_index_analyzer"
}
}
}
}
}
Понадобилось введение синонимов.
Изменил индекс следующим образом:
{
"settings":{
"analysis":{
"analyzer":{
"synonym":{
"tokenizer":"whitespace",
"filter":["synonym"]
},
"str_search_analyzer":{
"tokenizer":"keyword",
"filter":["lowercase"]
},
"str_index_analyzer":{
"tokenizer":"keyword",
"filter":["lowercase", "substring", "synonym"]
}
},
"filter":{
"substring":{"type":"nGram", "min_gram":2, "max_gram":25},
"synonym":{
"type":"synonym",
"synonyms_path":"synonyms.txt"
}
}
}
},
"mappings":{
"item":{
"properties":{
"org":{"type":"string", "search_analyzer":"str_search_analyzer", "analyzer":"str_index_analyzer"},
"ind":{"type":"string", "search_analyzer":"str_search_analyzer", "analyzer":"str_index_analyzer"},
"name":{"type":"string", "search_analyzer":"str_search_analyzer", "analyzer":"str_index_analyzer"}
}
}
}
}
Поиск осуществляю следующим запросом:
{
"size" : 20,
"query" : {
"multi_match" : {
"query" : "string",
"fields" : [ "org^3", "ind", "name" ],
"analyzer" : "synonym"
}
}
}
Синонимы в файле synonyms.txt заданы в виде:
synonym data1,synonym data2 => data1
synonym data3,synonym data4 => data2
С такими условиями поиск по синонимам срабатывает, если в query задано точное значение синонима.
Возможно ли, чтобы поиск по синонимам так же работал по фильтру nGram?
Пробовал в analyzer synonym добавить фильтр nGram и перезалить данные в индекс. В таком случае я вообще не понимаю что он ищет - результаты поиска совершенно не соответствуют запросу.