Вы можете использовать запрос bool
и номер boost
.
Как вы сказали, чтобы выполнить операцию OR
среди полей A, B & C Вы должны использовать should
запрос с minimum_should_match
как 1 (Значение по умолчанию) получить read more about miminum_should_match. вы можете добавить boost
также init.
Примечание: Например, я использовал термин query, вам нужно использовать соответствующий запрос для получения наилучших результатов в соответствии с вашими требованиями.
{
"should": [
{
"term": {
"A": "searchTerm"
}
},
{
"term": {
"B": "searchTerm"
}
},
{
"term": {
"C": "searchTerm"
}
}
],
"minimum_should_match": 1,
"boost": 1
}
И для выполнения AND
операции между выше запросом и другим полем, которое нужно добавить это с must
запросом, наконец, запрос BOOL будет вроде как ниже
{
"bool": {
"must": [
{
"term": {
"D": "searchTerm"
}
},
{
"should": [
{
"term": {
"A": "searchText"
}
},
{
"term": {
"B": "searchText"
}
},
{
"term": {
"C": "searchText"
}
}
],
"minimum_should_match": 1,
"boost": 1
}
]
}
}
Это будет выполнять логическое что вы упомянули в вопросе (A || B || C) & & D.
Ссылки:
Там есть ошибка в вашем последнем примере. {} Не должен находиться вокруг блока "should". – rvheddeg