elasticsearch 获取文档中出现的字段的值,这些值至少具有另一个字段的两个唯一值

zpf6vheq  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(79)

我想得到一个字段的唯一值,出现在文档中至少有2个不同的另一个字段的值。例如,如果我购买的每本书都有一个文档,Map如下所示:

buyer_name: keyword  # john_doe
book: keyword  # ISBN

字符串
我想让所有购买至少两本不同书籍的买家。有什么有效的方法可以做到这一点吗?这对于数据库中存在的数百万个唯一名称是否可行-通过使用一些客户端,或者使用异步搜索?谢啦,谢啦

brccelvz

brccelvz1#

据我所知-你想在基于SQL的语言中做一个类似的子选择。
但不幸的是,Elasticsearch不支持它们。也许它可以通过使用桶聚合的2个请求来完成。https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html
您可以尝试类似于此查询的操作,然后获取包含超过2个doc_counts的帐户的id。

{
"query": {
    "match_all": {}
},
"aggs": {
    "buyer": {
        "terms": {
            "field": "buyer_name"
        },
        "aggs": {
            "unique_books": {
                "cardinality": {
                    "field": "book"
                }
            }
        }
    }
}

字符串
}
或者,您可以尝试使用搜索脚本计算唯一值。但不能保证那东西的性能。https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-query.html

相关问题