Если предложение работает как OR, оно не отфильтровывает документы, влияющие на оценку. Документы, которые соответствуют предложению should, получают более высокий балл.
Если вы хотите отфильтровать по множественному соответствию, вы можете переместить его в предложение фильтра
filter: [
{
name: "baseline", values: ["1f.0.1.0", "1f.1.8.3"]
},
{
multi_match:
{
query: "national",
fields: ["cdrp","description","narrative.*","title","cop"]
}
}
]
Filter vs Must: - Оба возвращают предложения соответствия документов указано. Фильтр не оценивает документы. Поэтому, если вас не интересует количество документов или порядок возврата документов, вы можете использовать фильтр. Таким образом, оба варианта одинаковы с разницей в оценке.
Документы с большим количеством совпадений оцениваются выше
Multi_match по умолчанию использует best_fields
Находит документы, которые соответствуют любому полю, но использует _score из лучшего поля.
Он использует оценку, возвращенную для поля с максимальным количеством совпадений, для расчета оценки для каждого документа.
Пример
В документе 1 есть совпадения в двух полях, поле 1 (оценка 2), поле 2 (оценка 1)
В документе 2 есть совпадения в одном поле, поле 2 (оценка 3 )
Docu mnet 2 будет иметь более высокий рейтинг, даже если соответствует 1 поле.
Вы можете изменить его на most_fields
Находит документы, соответствующие любому полю и объединяет _score из каждого поля.
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "test",
"fields": [],
"type": "most_fields"
}
}
]
}
}
}
Тем не менее документ с меньшим количеством сопоставленных полей может получить более высокий рейтинг из-за высокого балла в поле, вызванного несколькими терминами.
Если вы хотите дать одинаковую оценку одному полю независимо от количества совпавших жетонов. Вам нужно использовать constant_score query
{
"query": {
"bool": {
"should": [
{
"constant_score": {
"filter": {
"term": {
"field1": "test"
}
}
}
},
{
"constant_score": {
"filter": {
"term": {
"field2": "test"
}
}
}
}
]
}
},
"highlight": {
"fields": {
"field1": {},
"field2": {}
}
}
}
Result:
"hits" : [
{
"_index" : "index18",
"_type" : "_doc",
"_id" : "iSCe6nEB8J88APx3YBGn",
"_score" : 2.0, --> one score per field matched
"_source" : {
"field1" : "test",
"field2" : "test"
},
"highlight" : {
"field1" : [
"<em>test</em>"
],
"field2" : [
"<em>test</em>"
]
}
},
{
"_index" : "index18",
"_type" : "_doc",
"_id" : "iiCe6nEB8J88APx3ghF-",
"_score" : 1.0,
"_source" : {
"field1" : "test",
"field2" : "abc"
},
"highlight" : {
"field1" : [
"<em>test</em>"
]
}
},
{
"_index" : "index18",
"_type" : "_doc",
"_id" : "iyCf6nEB8J88APx3UhF8",
"_score" : 1.0,
"_source" : {
"field1" : "test do",
"field2" : "abc"
},
"highlight" : {
"field1" : [
"<em>test</em> do"
]
}
}
]
}