elasticsearch - 如何正确设置日期和时间的映射以及如何在 ElasticSearch 中过滤它们?
问题描述
搜索日期不会返回真正必须的文档。没有错误信息。
下面是三个json:mapping、request和第一个找到的doc
{
"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 的日期,所以应该找不到任何东西。
解决方案
您的日期格式错误:应该是yyyy-MM-dd
(即小写y
和d
)
D
(大写 D)是一年中的一天(不是一个月中的一天)Y
(大写 Y)是基于周的年份(不是年份)
推荐阅读
- substrate - 如何在 Substrate 中安装四个节点的网络
- angular - Angular 组件不会对属性更改做出反应
- ios - 离子(Appflow):请注册自定义 URL 方案 - 方案存在于 plist 文件中
- haskell - Control.Lens 中的 Market 名称背后的原因是什么?
- python - 改组数据框中的多列
- function - Sharepoint 如何更改新文档的功能
- javascript - Jest 模拟不适用于 react-native 输入
- javascript - Vue JS:同时获取输入数组的唯一ID和值
- uwp - 如何使用 UWP Backbround Task 从本地存储(比如 "C:\\" )读取文件?
- javascript - React 中通过 ID 访问 DOM 元素