Невозможно получить правильный результат от эластичного поиска на основе запроса и токенизации документа
Я пытаюсь реализовать поисковую систему, в которой мне нужно использовать Edge NGRAM Tokenizer. Настройки для создания индекса показаны ниже. Я использовал один и тот же токенизатор как для документов, так и для поисковых запросов. (Документы на перизанском языке)
PUT /test
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "autocomplete"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge-ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
}
Проблема проявляется, когда я получаю 0 результатов (результатов) из поискового запроса 'آلمانی' в документах, в то время как у меня есть документ с данными: 'آلمان خوب است'.
Как вы можете видеть, результат анализа термина "ملمانی" показывает, что он генерирует токен "آلمان" и работает правильно.
{
"tokens" : [
{
"token" : "آ",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آل",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلم",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلما",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلمان",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلمانی",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
}
]
}
Поисковый запрос, показанный ниже, получает 0 просмотров.
GET /test/_search
{
"query": {"match": {
"title": {"query": "آلمانی" , "operator": "and"}
}}
}
Однако поисковый термин "آلما" возвращает документ с данными "آلمان خوب است". Как я могу решить эту проблему?
Ваша помощь будет принята с благодарностью.
1 ответ
Я нашел этот пост DevTicks Рикардо Хека, который решил мою проблему. введите ссылку для более подробного описания
Я изменил настройки отображения следующим образом:
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search",
"fields": {
"ngram": {
"type": "text",
"analyzer": "autocomplete"
}
}
}
}
}
}
И теперь я получаю документ "آلمان خوب است", ища термин ""لمانی".