ElasticSearch - исключить попадание с метаданными - PullRequest
0 голосов
/ 24 октября 2019

Я использую ES 6.6 и выполняю поиск документов, которые старше текущей даты. Есть только 2 документа, но я возвращаю 3 предмета. 2 существующих документа и третий, это настройки и сопоставления. Я хочу получить только два документа.

Я пытался добавить фильтр с «существует», но затем ES не возвращает никаких документов:

GET _search
{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "products"
          }
        },
        {
          "range": {
            "happening_at": {
              "gte": "now"
            }
          }
        }
      ]
    }
  }
}

Когда я ищу только с диапазономЯ получаю 2 правильных документа, но с дополнительным «попаданием» без документа, только с настройками и сопоставлениями.

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Добро пожаловать в SO, Адриан.

Вы запускаете _search по all индексам, так как вы не указали никакого имени индекса. Пожалуйста, попробуйте GET <your_index_name>/_search { ... request body ...}.

Кроме того, "gte": "now" вряд ли вернет какие-либо записи, поскольку это означает дату greater than or equal to current date. В вашем случае вы хотите, чтобы записи older, чем текущая дата. Таким образом, вы можете использовать lt:now или еще лучше lt:now/d, поскольку now/d хорош с точки зрения производительности и позволяет кэшировать.

Попробуйте следующее:

GET <your_index_name>/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "products"
          }
        },
        {
          "range": {
            "happening_at": {
              "lt": "now/d"
            }
          }
        }
      ]
    }
  }
}
0 голосов
/ 24 октября 2019

Вы должны отправить свой запрос :). Если вы хотите получить, пожалуйста, не забудьте / / .1001*

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html

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