Я пытался преобразовать запрос в стиле lucene в синтаксис запроса ES, но я застрял в подпунктах. например
(title:history^10 or series:history) and (NOT(language:eng) OR language:eng^5) and (isfree eq 'true' OR (isfree eq 'false' AND owned eq 'abc^5'))
В нем говорится, что «дайте мне совпадение для истории в« названии »или« сериале », но улучшите совпадение заголовка И где язык не обязательно должен быть английским, но если это так, то улучшите его И где совпадение бесплатное или где это не бесплатно, убедитесь, что оно принадлежит клиенту abc".
Я чувствую, что это сложный запрос, но, похоже, он работает правильно. Преобразование предложений в синтаксис ES сбивает меня с толку, поскольку у меня нет концепции скобок. Я думаю, что мне нужно использовать логические запросы ... У меня есть следующее, которое, как я знаю, неправильно применяет критерии - оно говорит, что вы должны иметь (язык: eng ИЛИ isFree eq 'true' ИЛИ владелец: abc). Кажется, я не могу сделать мысленный скачок, чтобы построить «должен/должен» с НЕ в нем.
Помогите, пожалуйста?
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "history",
"fields": [
"title^10.0",
"series"
]
}
}
],
"should": [
{
"term": {
"language": {
"value": "eng",
"boost": 5
}
}
},
{
"term": {
"isFree": {
"value": true
}
}
},
{
"term": {
"owned": {
"value": "abc",
"boost": 5
}
}
}
]
}
},