#elasticsearch
#elasticsearch
Вопрос:
Когда я запускаю этот запрос
"multi_match": {
"query": "paper copier ",
"fields": [ "allStringFields" ],
"type": "cross_fields",
"operator": "and",
"analyzer": "synonym"
}
я получаю 1342 результата
Но когда я запускаю этот запрос (обратите внимание на порядок слов)
"multi_match": {
"query": " copier paper ",
"fields": [ "allStringFields" ],
"type": "cross_fields",
"operator": "and",
"analyzer": "synonym"
}
Я получаю нулевые результаты
Я использую анализатор синонимов, и это является причиной такого поведения
Есть ли решение для этого?
Комментарии:
1. Мое определение индекса похоже на то, что вы написали здесь, но все равно не работает .
Ответ №1:
Добавление рабочего примера с индексными данными, сопоставлением, поисковым запросом и результатом поиска. В приведенном ниже примере я взял два синонима table
и tables
I get zero results
Пожалуйста, просмотрите сопоставление индексов еще раз. Согласно приведенному ниже примеру, ключевое слово для поиска — это table chair
, это нужно искать в обоих полях title
и content
. Приведенный ниже запрос вернет документы, содержащие оба table AND chair
. Чтобы получить подробное объяснение, обратитесь к документации ES по запросу с несколькими совпадениями и фильтру маркеров синонимов.
Сопоставление индексов:
{
"settings": {
"index": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms": [
"table, tables"
]
}
},
"analyzer": {
"synonym_analyzer": {
"filter": [
"lowercase",
"synonym_filter"
],
"tokenizer": "standard"
}
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text"
}
}
}
}
Индексировать данные:
{ "title": "table chair" }
{ "title": "tables chair" }
{ "title": "table fan" }
{ "title": "light fan", "content": "chair" }
Поисковый запрос:
{
"query": {
"multi_match": {
"query": "table chair",
"operator": "and",
"type":"cross_fields",
"fields": [
"title","content"
],
"analyzer": "synonym_analyzer"
}
}
}
Результат поиска:
"hits": [
{
"_index": "synonym",
"_type": "_doc",
"_id": "1",
"_score": 1.7227666,
"_source": {
"title": "table chair"
}
},
{
"_index": "synonym",
"_type": "_doc",
"_id": "2",
"_score": 1.3862942,
"_source": {
"title": "tables chair"
}
}
]
Поиск table chair
или chair table
, дает тот же результат поиска, что и показано выше.