ElasticSearch query_string с фильтром не удалось получить результаты - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть следующий запрос Elasticsearch (обычно он больше, но лишен части, которая вызывает проблемы):

'query' => [
    'bool' => [
        'must' => [
            'query_string' => [
                'query' => $keywords,
                'fields' => ['title']
            ]
        ],
        'filter' => [
             'term' => [
                'school_id' => 1
            ]
         ]
    ]
]

Но если я уберу фильтр, он будет работать нормально, но я хочу отфильтровать только поиск с определенным идентификатором школы.

1 Ответ

0 голосов
/ 04 ноября 2018

Почему бы вам не фильтровать данные, а просто взять то, что вам нужно?

Фильтрация используется для двоичного результата - в некотором смысле, если вы хотите знать, является ли поле документа school_id 1 или нет. Если вы просто хотите получить результат, есть и другие способы сделать это.

В вашем случае я считаю, что вы просто "перепрыгнули" через must и bool, и по этой причине ваш запрос не удался.

Итак, у вас есть 2 варианта, первый, который исправит ваш следующим образом:

GET /_search
{
  "query": {
    "bool": {
      "must": {
        "query_string": {
          "default_field": "keywords",
          "query": "title"
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "school_id": "1"
              }
            }
          ]
        }
      }
    }
  }
}

ИЛИ если вы хотите получить оценку вашего результата, вы можете использовать это:

GET /_search
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "keywords",
            "query": "title"
          }
        },
        {
          "match": {
            "school_id": {
              "query": "1"
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...