Elasticsearch索引中有一个“remark”字段,其中包含各种备注沿着给出备注的日期。例如:
remark
------
14/02/2023 To be updated ; 15/02/2023 Further action is needed ; 16/02/2023 Looks good
由于某些特定于实施的原因,我无法将日期拆分为单独的字段。我需要在“备注”字段中查询与给定日期范围匹配的所有记录。例如:检索日期范围为15/02/2023到16/02/2023的所有记录。
我在Elasticsearch中编写了以下查询:
GET myindex/_search
{
"query"
: {
"bool"
: {
"must"
: [
{
"range"
: {
"remark"
: {
"gte" : "2023-02-15",
"lte" : "2023-02-16"
}
}
}
]
}
},
"highlight"
: {
"fields"
: {
"content"
: {
"type" : "unified",
"fragment_size" : 150,
"number_of_fragments" : 3,
"pre_tags" : [""],
"post_tags" : [""]
}
}
},
"size"
: 1000
}
由于字段“remark”不是datetime类型,因此上述查询不起作用。是否有解决此问题的方法?
1条答案
按热度按时间ddarikpa1#
是的,可以在
range
查询中使用text或keyword字段类型,但这是一个开销很大的查询,因此默认情况下禁用。对文本和关键字字段使用范围查询
如果search.allow_expensive_queries设置为false,则不会执行文本或关键字字段的范围查询。
我不建议您启用它,但如果您愿意,可以用途:
更新群集设置后,查询将正常工作。
建议:添加新字段:
并更新数据时,通过查询更新将为每个文档添加新字段和值。
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html#ranges-on-text-and-keyword