gpt4 book ai didi

elasticsearch - 如何使用ElasticSearch 5.1索引日期范围

转载 作者:行者123 更新时间:2023-12-03 00:07:40 24 4
gpt4 key购买 nike

我有一些要使用ElasticSearch索引/搜索的文档。这些文档可能包含多个日期,在某些情况下,日期实际上是日期范围。我想知道是否有人可以帮助我弄清楚如何编写执行正确操作的查询(或如何正确索引我的文档以便查询)。

一个例子值得一千个单词。假设文件包含两个结婚日期范围:2005-05-05至2007-07-07和2012-12-012至2014-03-03。

如果我在开始日期和结束日期字段中为每个日期范围建立索引,并编写一个典型的范围查询,那么对2008-01-01的搜索将返回此记录,因为一个婚姻将满足其中一个不平等,而另一个婚姻将满足另一个不平等。我不知道如何让ES将两个日期范围分开。显然,拥有“结婚1”和“结婚2”字段可以解决此特定问题,但是在我的实际数据集中,我拥有无数的日期。

我知道ES 5.2支持date_range数据类型,我相信它可以解决此问题,但是我坚持使用5.1,因为我正在使用AWS的托管ES。

提前致谢。

最佳答案

您可以为此使用nested objects

PUT /records
{
"mappings": {
"record": {
"properties": {
"marriage": {
"type": "nested",
"properties": {
"start": { "type": "date" },
"end": { "type": "date" },
"person1": { "type": "string" },
"person2": { "type": "string" }
}
}
}
}
}
}

PUT /records/record/1

{
"marriage": [ { "start" : "2005-05-05","end" :"2007-07-07" , "person1" : "","person2" :"" },{"start": "2012-12-12","end": "2014-03-03","person1" : "","person2" :"" }]
}

POST /records/record/_search
{
"query": {

"nested": {
"path": "marriage",
"query": {

"range": {
"marriage.start": { "gte": "2008-01-01", "lte": "2015-02-03"}
}

}
}

}

关于elasticsearch - 如何使用ElasticSearch 5.1索引日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43746243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com