Я пытаюсь получить все документы, у которых есть какие-либо из терминов, представленных в запросе, и более высокий рейтинг тех документов, у которых больше всего терминов в этом поле, но поле, которое я пытаюсь найти, является вложенным. Поэтому, когда я пытаюсь выполнить запрос multi_match, он не соответствует более чем одному термину в этом поле. Он находит первое совпадение и учитывает оценку этого совпадения и не соответствует оставшимся условиям, чтобы увеличить оценку этого документа.
Вот отображение поля, которое я пытаюсь найти:
{
"skills": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"analyzer": "standard_analyzer",
"search_analyzer": "search_analyzer",
},
"rating": {
"type":"byte"
},
"description": {
"type": "text",
"analyzer": "standard_analyzer",
"search_analyzer": "search_analyzer"
}
}
}
}
Пример данных:
doc1: {
skills: [
{
name: "HTML",
rating: 4,
description: "Whatever..."
}
]
}
doc2: {
skills: [
{
name: "Javascript",
rating: 5,
description: "Whatever..."
}
]
}
doc3: {
skills: [
{
name: "HTML",
rating: 5,
description: "Whatever..."
},
{
name: "Javascript",
rating: 4,
description: "Whatever..."
},
]
}
Поисковый запрос:
GET my-index/_search
{
"query": {
"nested": {
"path": "skills",
"score_mode": "sum",
"query": {
"multi_match": {
"query": "HTML Javascript",
"fields": [
"skills.name"
],
"operator": "or",
"type": "most_fields"
}
}
}
},
"explain": true
}
Например. Когда я запрашиваю «HTML Javascript», он почему-то оценивает документ выше, который имеет последний термин ('Javascript') и даже не ищет 'HTML'. Я могу подтвердить, что разделение выполняется правильно на основе пробелов, оно правильно ранжирует документ, когда термины присутствуют в одном поле и не являются равнодушными вложенными документами. То, что я хочу, - это ранжировать документы выше, которые имеют как 'HTML', так и 'Javascript', в этом случае doc3 должен быть выше, чем doc1 и doc2.