#elasticsearch
#elasticsearch
Вопрос:
Для языка EN у меня есть пользовательский анализатор, использующий porter_stem . Я хочу, чтобы запросы со словами «вирус» и «вирусы» возвращали одинаковые результаты.
Я обнаружил, что портер использует virus-> viru и viruses-> virus. Следовательно, я получаю разные результаты.
Как я могу справиться с этим?
Ответ №1:
Вы можете добиться своего варианта использования, то есть запросы со словами «вирус» и «вирусы» должны возвращать тот же результат, используя фильтр токенов snowball, который сводит все слова к их корневому слову.
Добавление рабочего примера с индексными данными, сопоставлением, поисковым запросом и результатом поиска
Сопоставление индексов:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_snow"
]
}
},
"filter": {
"my_snow": {
"type": "snowball",
"language": "English"
}
}
}
},
"mappings": {
"properties": {
"desc": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
Анализ API
GET /_analyze
{
"analyzer" : "my_analyzer",
"text" : "viruses"
}
Генерируются следующие токены —
{
"tokens": [
{
"token": "virus",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
}
]
}
Индексировать данные:
{
"desc":"viruses"
}
{
"desc":"virus"
}
Поисковый запрос:
{
"query": {
"match": {
"desc": {
"query": "viruses"
}
}
}
}
Результат поиска:
"hits": [
{
"_index": "65707743",
"_type": "_doc",
"_id": "1",
"_score": 0.18232156,
"_source": {
"desc": "viruses"
}
},
{
"_index": "65707743",
"_type": "_doc",
"_id": "2",
"_score": 0.18232156,
"_source": {
"desc": "virus"
}
}
]
Комментарии:
1. Спасибо. Как можно увидеть данные индекса?
2. @BenderRodriguez вы хотите видеть все проиндексированные данные? Для этого вы можете использовать запрос сопоставить все elastic.co/guide/en/elasticsearch/reference/current /…
3. Я хочу видеть, например, что когда оно происходит от слова «вирус», оно получает «viru» — где оно хранит это слово и другие слова, которые были получены. Спасибо.