【问题标题】:Elasticsearch: filter results having highest field valueElasticsearch:过滤具有最高字段值的结果
【发布时间】:2014-12-19 21:07:25
【问题描述】:

我有两个字段,文本和大小的对象:

{"text":"example text", "size":"0"}
{"text":"some text for example", "size":"1"}
{"text":"other text for example", "size":"1"}
{"text":"example with different size", "size":"2"}
{"text":"just an example", "size":"2"}

例如,我使用match 查询“示例”,因此所有对象都将被匹配。接下来,我想过滤那些具有最大size 字段值的那些,在这种情况下为 2。

最大值应仅用于匹配的字段。因此,如果我搜索仅匹配大小为 1 的前两行的“文本”,则对象应由 size == 1 过滤。

我可以通过两个查询来获得它,第一个是获取最大值,第二个是过滤,但是可以在一个查询中做到这一点吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我能想到的唯一选择是sort 按您的尺寸字段的数据:

    {
      "sort" : [
        { "size" : {"order" : "desc"}}
    ],
    "query" : {
        ...
        }
    }
    

    否则 - 是的,您需要按照您的描述进行查询。

    【讨论】:

    • 当我的第一个结果的大小小于最大值时,我可以从排序查询中提取结果并剪切它们,它可以工作,但在这种情况下,我会遇到分页问题和大量匹配结果。跨度>
    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2019-04-23
    • 2014-06-06
    • 2013-12-24
    • 2015-10-06
    相关资源
    最近更新 更多