Может кто-нибудь объяснить мне, пожалуйста, почему запрос соответствия сначала возвращает менее релевантные результаты? У меня есть индексное поле с именем «нормализовано». Его отображение:
normalized: {
type: "text"
analyzer: "autocomplete"
}
настройки для этого поля:
analysis; {
filter: {
autocomplete_filter: {
type: "edge_ngram",
min_gram => "1",
max_gram => "20"
}
analyzer: {
autocomplete: {
filter: [
"lowercase",
"asciifolding",
"autocomplete_filter"
],
type: "custom",
tokenizer: "standard"
}
}
так как я знаю, что это делает токены ascii, строчные, например МЫШЬ = m, mo, mou, mous, mouse.
Проблема в том, что запрос вроде:
{
'query': {
'bool': {
'must': {
'match': {
'normalized': 'simag'
}
}
}
}
}
возвращает результаты типа
- "Симан Симан Сервис"
- "мгр симона симункова симики"
- "Симан - СИМАНС"
- "Симунек Симунек Симунек"
- .....
Но нет SIMAG , который содержит все буквы фразы соответствия.
Как достичь этого наиболее релевантного результата будут слова, которые содержат все буквы перед токенами, которые не содержат все буквы.
Надеюсь, кто-нибудь поймет, что мне нужно.
Спасибо.
PS: я не уверен, но как насчет этого запроса:
{
'query': {
'bool': {
'should': [
{'term': {'normalized': 'simag'}},
{'match': {'normalized': 'simag'}}
]
}
}
}
Имеет ли это смысл по сравнению с предыдущим кодом?