У меня есть запросasticsearch bool с несколькими предложениями must , объединяющими несколько запросов match для нескольких полей с различными значениями повышения.
скажем, у меня есть 5 полей:
productName / currency / country / identifierNumber
Я хочу условно отфильтровать свои результаты с помощью этой логики:
, если результаты (попадания) запроса bool будут получены из запроса на совпадение в поле ( productName ) затем Фильтр по валюте.
, если результаты (попадания) запроса bool будут получены из запроса на совпадение в поле ( identifierNumber ) затем Не фильтровать по валюте
ОБНОВЛЕНИЕ
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "parameter",
"fields": [
"productName.test^8",
"productName.raw^4",
"_all^2",
"Zone^10",
"category^12",
"class^71"
],
"fuzziness": "1",
"prefix_length": 1
}
},
{
"match": {
"productName.test": {
"query": "parameter",
"operator": "and",
"fuzziness": "1",
"prefix_length": 3,
"boost": 1000
}
}
},
{
"match": {
"productName.raw": {
"query": "parameter",
"operator": "or",
"fuzziness": "AUTO",
"prefix_length": 3,
"boost": 10
}
}
},
{
"match": {
"identifierNumber": {
"query": "parameter",
"boost": 3000
}
}
},
{
"term": {
"tic": {
"value": "parameter",
"boost": 30000
}
}
},
{
"match": {
"_all": {
"query": "parameter",
"operator": "or",
"fuzziness": "1",
"prefix_length": 2,
"boost": 10
}
}
}
]
}
},
"functions": [
{
"field_value_factor": {
"field": "productvalue"
}
}
],
"boost_mode": "multiply"
}
},
"size": 30,
"highlight": {
"fields": {
"*": {}
},
"require_field_match": false
},
"post_filter": {
"bool": {
"must": [
{
"match": {
"countryName": "France"
}
}]
}
}
}