Почему мой запрос даты в Elasticsearch не удался? - PullRequest
0 голосов
/ 04 марта 2019

В настоящее время я следую веб-учебнику, и когда я запускаю:

GET /product/_doc/_search
{
  "query": {
    "range": {
      "in_stock": {
        "gte": 1,
        "lte": 5
      }
    }
  }
}

, я получаю кучу записей, в том числе:

  {
    "_index" : "product",
    "_type" : "_doc",
    "_id" : "366",
    "_score" : 1.0,
    "_source" : {
      "name" : "Eggplant - Baby",
      "price" : 58,
      "in_stock" : 1,
      "sold" : 187,
      "tags" : [ ],
      "description" : "Mauris sit amet eros. Suspendisse accumsan tortor quis turpis. Sed ante. Vivamus tortor. Duis mattis egestas metus. Aenean fermentum. Donec ut mauris eget massa tempor convallis. Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.",
      "is_active" : false,
      "created" : "2016/01/03"
    }
  },

Когда я запускаю:

GET /product/_doc/_search
{
  "query": {
    "range": {
      "created": {
        "gte": "2010/01/01"
      }
    }
  }
}

по одному и тому же набору данных, я получаю:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

Почему я получаю ноль хитов из моего запроса?Я понимаю, что поиск сканирует записи с созданной датой, превышающей 2010/01/01, поэтому он не должен совпадать хотя бы с id 366?

Редактировать:

Вотмои сопоставления - похоже, тип даты:

{
  "product" : {
    "aliases" : { },
    "mappings" : {
      "_doc" : {
        "dynamic" : "false",
        "properties" : {
          "created " : {
            "type" : "date",
            "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
          },
          "description" : {
            "type" : "text"
          },
          "discount" : {
            "type" : "integer"
          },
          "in_stock" : {
            "type" : "integer"
          },
          "is_active" : {
            "type" : "boolean"
          },
          "name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          },
          "price" : {
            "type" : "integer"
          },
          "sold" : {
            "type" : "long"
          },
          "tags" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword"
              }
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1551151769380",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "3YTYcG-9TPeT_3jXfX5IMA",
        "version" : {
          "created" : "6060199"
        },
        "provided_name" : "product"
      }
    }
  }
}

1 Ответ

0 голосов
/ 04 марта 2019

У вас есть опечатка в названии вашей недвижимости.У вас есть лишний пробел после «созданного»:

"properties" : {
          "created " : { <-- here
            "type" : "date",
            "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
          },

Чтобы диагностировать это, вы должны позвонить

GET /product/_mapping

и проверить, что ваше поле created действительно отображается как дата.В твоем случае это был текст.

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