如何正确设置日期和时间的映射以及如何在ElasticSearch中过滤它们?

时间:2019-06-28 15:48:18

标签: elasticsearch

搜索日期不会返回确实需要的文档。 没有错误消息。

下面有三个json:映射,请求和第一个找到的文档

{
  "hello_world_schedule_fields": {
    "mappings": {
      "properties": {
        "date": {
          "type": "date",
          "format": "YYYY-MM-DD"
        },
        "datetime": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "id": {
          "type": "long"
        },
        "is_free": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "price": {
          "type": "long"
        },
        "quest_id": {
          "type": "long"
        },
        "time": {
          "type": "date",
          "format": "HH:mm"
        }
      }
    }
  }
}
{
  "query":{
    "bool":{
      "filter":{
        "term":{
          "quest_id":722
        }
      },
      "must":{
        "range":{
          "date":{
            "lte":"2019-06-01"
          }
        }
      }
    }
  },
  "from":0,
  "size":9999
}
{
  "id":4836777,
  "quest_id":722,
  "datetime":"2019-06-24 10:15",
  "price":400,
  "is_free":"true",
  "created_at":null,
  "updated_at":null,
  "date":"2019-06-24",
  "time":"10:15"
}

所有找到的文档都具有quest_id:722,但是日期错误。 我的索引中最小的现有日期是2019-06-24,但是我要搜索的日期小于2019-06-01,所以什么也找不到。

1 个答案:

答案 0 :(得分:1)

您的date format是错误的:应该为[{'bottom': Decimal('58.650'), 'text': 'Contact'}] [{'bottom': Decimal('74.101'), 'text': 'Oliver'}, {'bottom': Decimal('77.280'), 'text': 'email@domain.com'}] [{'bottom': Decimal('90.662'), 'text': 'CEO'}] [{'bottom': Decimal('101.833'), 'text': 'www.domain.com'}] (即小写的yyyy-MM-ddy

  • d(大写D)是一年中的某天(不是一个月中的某天)
  • D(大写字母Y)是基于周的年份(而不是年份)