当前位置:  开发笔记 > 前端 > 正文

如何根据每个文档的多个日期执行日期范围elasticsearch查询?

如何解决《如何根据每个文档的多个日期执行日期范围elasticsearch查询?》经验,为你挑选了1个好方法。

我正在使用ElasticSearch索引论坛帖子并回复帖子.每个帖子都有一个与之关联的日期字段.我想执行一个包含日期范围的查询,该日期范围将返回包含与日期范围匹配的帖子的主题.我已经看过使用嵌套映射,但文档说该功能是实验性的,可能会导致不准确的结果.

实现这一目标的最佳方法是什么?我正在使用Java API.



1> DrTech..:

你没有多说你的数据结构,但我从你的问题推断你有post包含一个date字段的对象,可能是一个thread_id字段,即某种方式来识别一个帖子属于哪个帖子?

你还有一个thread物体,或者你的物体thread_id足够吗?

无论哪种方式,您声明的目标是返回在特定日期范围内有帖子的主题列表.这意味着您需要对线程进行分组(而不是thread_id在日期范围内为每个帖子多次返回相同的内容).

这种分组可以通过使用facet来完成.

所以JSON中的查询看起来像这样:

curl -XGET 'http://127.0.0.1:9200/posts/post/_search?pretty=1&search_type=count'  -d '
{
   "facets" : {
      "thread_id" : {
         "terms" : {
            "size" : 20,
            "field" : "thread_id"
         }
      }
   },
   "query" : {
      "filtered" : {
         "query" : {
            "text" : {
               "content" : "any keywords to match"
            }
         },
         "filter" : {
            "numeric_range" : {
               "date" : {
                  "lt" : "2011-02-01",
                  "gte" : "2011-01-01"
               }
            }
         }
      }
   }
}
'

注意:

我正在使用,search_type=count因为我实际上并不希望返回的帖子,只是thread_ids

我已经指定我想要20个最常遇到的thread_ids(size: 20).默认值为10

我正在使用a numeric_range作为date字段,因为日期通常有许多不同的值,并且numeric_range过滤器使用不同的range过滤器方法,使其在这种情况下表现更好

如果你thread_id的样子how-to-perform-a-date-range-elasticsearch-query那么你可以直接使用这些值.但是如果你有一个单独的thread对象,那么你可以使用multi-get API来检索它们

您的thread_id字段应映射为{ "index": "not_analyzed" }将整个值视为单个术语,而不是分析为单独的术语

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有