Позвольте мне сначала объяснить вам, как, Ваш запрос извлекал все записи, , даже если он содержит слово "paddy" или нет. Это б / к, вы используете должен предложение, которое просто означает, что предложение (запрос) должно появиться в соответствующем документе. , но это не означает, что оно должно появиться, следовательно, этовыборка всех документов в вашем индексе и последующая фильтрация на основе category
.
. Вам нужен пункт верхнего уровня must , что означает, что он должен появиться, но затем я использовалвложенный должен , так как он может быть либо в title , либо abstract , но хотя бы одно из этих полей должно содержать значение, так что верхний уровень условие must возвращает true.
Ниже приведен правильный запрос, который я пробовал локально и работает нормально, в соответствии с вашим вариантом использования:
{
"query": {
"bool": {
"must": {
"bool": {
"should": [
{
"match": {
"abstract": "paddy"
}
},
{
"match": {
"title": "paddy"
}
}
]
}
},
"filter": {
"term": {
"category": "agriculture"
}
}
}
}
}
Дайте мне знать, если он ясенВы и решаете свою проблему.