Я пытаюсь настроить эластичный поиск с синонимами.
Это мои настройки:
"analysis": {
"analyzer": {
"category_synonym": {
"tokenizer": "whitespace",
"filter": [
"synonym_filter"
]
}
},
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms_path": "synonyms.txt"
}
}
}
Конфигурация сопоставлений:
"category": {
"properties": {
"name": {
"type":"string",
"search_analyzer" : "category_synonym",
"index_analyzer" : "standard",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
И список моих синонимов
film => video,
ooh => panels , poster,
commercial => advertisement,
print => magazine
Должен сказать, что я использую Elasticsearch Java API. Я использую QueryBuilders.queryStringQuery
, потому что это единственный способ настроить анализаторы на мой запрос. Итак, когда я делаю:
QueryBuilders.queryStringQuery("name:film").analyzer(analyzer)
Это возвращает меня
[
{
"id": 71,
"name": "Pitch video",
"description": "... ",
"parent": null
},
{
"id": 25,
"name": "Video",
"description": "... ",
"parent": null
}
]
Это идеально для меня, но когда я звоню что-то вроде этого
QueryBuilders.queryStringQuery("name:vid").analyzer(analyzer)
Я ожидаю, что он должен возвращать те же объекты, но ничего: []
Итак, я добавил звездочку к queryStringQuery
:
QueryBuilders.queryStringQuery("name:vid*").analyzer(analyzer)
Работает хорошо, но сейчас
QueryBuilders.queryStringQuery("name:film*").analyzer(analyzer)
возвращает меня []
Итак, как мне настроить эластичный поиск, чтобы он возвращал одни и те же объекты при поиске video
, vid
, film
и fil
?
Заранее спасибо!