Как получить документы, содержащие определенное слово в некоторых полях с отфильтрованным запросом? - PullRequest
3 голосов
/ 22 июня 2019

Я хочу найти все книги категории "Сельское хозяйство". книги должны содержать слово «падди» в заголовке ИЛИ абстрактное поле. Вот мой запрос:

GET /books/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "abstract": "paddy"
          }
        },
        {
          "match": {
            "title": "paddy"
          }
        }
      ],
      "filter": {
        "term": {
          "category": "Agriculture"
        }
      }
    }
  }
}

этот запрос возвращает все книги с категорией "Сельское хозяйство", даже если они содержат слово "рисовый" или нет. Что я сделал не так?

1 Ответ

3 голосов
/ 22 июня 2019

Позвольте мне сначала объяснить вам, как, Ваш запрос извлекал все записи, , даже если он содержит слово "paddy" или нет. Это б / к, вы используете должен предложение, которое просто означает, что предложение (запрос) должно появиться в соответствующем документе. , но это не означает, что оно должно появиться, следовательно, этовыборка всех документов в вашем индексе и последующая фильтрация на основе category.

. Вам нужен пункт верхнего уровня must , что означает, что он должен появиться, но затем я использовалвложенный должен , так как он может быть либо в title , либо abstract , но хотя бы одно из этих полей должно содержать значение, так что верхний уровень условие must возвращает true.

Ниже приведен правильный запрос, который я пробовал локально и работает нормально, в соответствии с вашим вариантом использования:

{
    "query": {
        "bool": {
            "must": {
                "bool": {
                    "should": [
                        {
                            "match": {
                                "abstract": "paddy"
                            }
                        },
                        {
                            "match": {
                                "title": "paddy"
                            }
                        }
                    ]
                }
            },
            "filter": {
                "term": {
                    "category": "agriculture"
                }
            }
        }
    }
}

Дайте мне знать, если он ясенВы и решаете свою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...