Я новичок в Elasticsearch, и мы работаем над требованием, при котором документ в эластичном поиске будет выбираться на основе типов соответствия , таких как fuzzyMatch, Wordmatch и т. Д.
Здесь мы сталкиваемся с проблемами производительности, когда документ сопоставляется для одного типа соответствия, документ должен выходить из запроса "bool" , но он участвует во всех типах соответствия и выдает мнеВ результате всех типов совпадений я попытался вложенный запрос bool , чтобы заставить его участвовать в одиночных типах совпадений и завершать работу при совпадении, иначе перейти к следующим типам совпадений.
Я пытался следить за этим блогом.
[https://www.elastic.co/blog/lost-in-translation-boolean-operations-and-filters-in-the-bool-query][1]
Даже это приводит к тому же результату ..
Пожалуйста, найдитеПример кода ниже.
{
"size": 10000,
"query": {
"function_score": {
"score_mode": "sum",
"functions": [
{
"filter": {
"bool": {
"should": [
{
"bool": {
"should": [
{
"match": {
"4": {
"fuzziness": "AUTO",
"query": "kavan",
"minimum_should_match": "50%",
"_name": "4.fuzzyMatch"
}
}
},
{
"match": {
"4": {
"query": "kavan",
"minimum_should_match": "50%",
"_name": "4.wordMatch"
}
}
}
]
}
},
{
"bool": {
"should": [
{
"match": {
"4.subStringMatch": {
"query": "kavan",
"minimum_should_match": "50%",
"_name": "4.subStringMatch"
}
}
},
{
"match": {
"4.phoneticMatch": {
"query": "kavan",
"minimum_should_match": "50%",
"_name": "4.phoneticMatch"
}
}
}
]
}
},
{
"match": {
"4.exactMatch": "kavan"
}
}
]
}
},
"weight": 50
}
]
}
}
}
Фактический результат:
"hits": {
"total": 94,
"max_score": 50.0,
"hits": [{
"_index": "6_1028",
"_type": "6_1028",
"_id": "14",
"_score": 50.0,
"_source": {
"1": 14,
"@timestamp": "2018-05-18T06:57:02.540Z",
"4": "kavana",
"6": "Vastrad",
"7": "Indiranagar",
"@version": "1",
"type": "1028",
"10": "Bangalore"
},
"matched_queries": ["4.phoneticMatch", "4.fuzzyMatch", "4.subStringMatch"]
}, {
"_index": "6_1028",
"_type": "6_1028",
"_id": "52",
"_score": 50.0,
"_source": {
"1": 52,
"@timestamp": "2018-05-18T06:57:02.559Z",
"4": "kavana",
"6": "Vastrad",
"7": "Indiranagar",
"@version": "1",
"type": "1028",
"10": "Bangalore"
},
"matched_queries": ["4.phoneticMatch", "4.fuzzyMatch", "4.subStringMatch"]
}, {
"_index": "6_1028",
"_type": "6_1028",
"_id": "53",
"_score": 50.0,
"_source": {
"1": 53,
"@timestamp": "2018-05-18T06:57:02.559Z",
"4": "kavana",
"6": "Vastrad",
"7": "Indiranagar",
"@version": "1",
"type": "1028",
"10": "Bangalore"
},
"matched_queries": ["4.phoneticMatch", "4.fuzzyMatch", "4.subStringMatch"]
}
}
Ожидаемый результат:
"hits": {
"total": 94,
"max_score": 50.0,
"hits": [{
"_index": "6_1028",
"_type": "6_1028",
"_id": "14",
"_score": 50.0,
"_source": {
"1": 14,
"@timestamp": "2018-05-18T06:57:02.540Z",
"4": "kavana",
"6": "Vastrad",
"7": "Indiranagar",
"@version": "1",
"type": "1028",
"10": "Bangalore"
},
"matched_queries": ["4.phoneticMatch"]
}
Только с одним типом совпадения в matched_queries
Примечание. Типы совпадений можно увидеть в блоке matched_queries .
Любые предложения на этот счет приветствуются ..