gpt4 book ai didi

elasticsearch - 我们如何仅在Elasticsearch上匹配的前缀上存储聚合?

转载 作者:行者123 更新时间:2023-12-02 22:24:27 25 4
gpt4 key购买 nike

我在Elaticsearch上索引了一些文档,这些文档的其中一个字段是“用户”,它是一组用户。现在,我尝试为每个用户查找用户名与某些前缀匹配的文档。前缀用于过滤文档。但是我也希望返回的存储桶也被相同的前缀过滤。反正有这样做吗?下面的示例解释了该问题。

创建一个索引test1:

curl -XPUT 'http://localhost:9200/test1/'

在索引test1中为type1类型创建9个文档:
    i=1
while [ $i -lt 10 ] ; do

curl -XPUT "localhost:9200/test1/type1/$i" -d '{
"users" : ["ram", "hari", "balu"]
}'
i=`expr $i + 1`
done

现在,按用户名匹配前缀“ra”的每个用户运行文档汇总
curl -XPOST 'localhost:9200/test1/type1/_search?pretty' -d '
{
"size" : 0,
"aggs": {
"prefix_match_aggr": {
"filter" : { "prefix" : {"users" : "ra"}},
"aggs" : {
"actual_aggr" : {
"terms": {
"field" : "users",
"size" : 0
}
}
}
}
}
}'

聚合返回以下内容:
{
"took" : 14,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 9,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"prefix_match_aggr" : {
"doc_count" : 9,
"actual_aggr" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "balu",
"doc_count" : 9
}, {
"key" : "hari",
"doc_count" : 9
}, {
"key" : "ram",
"doc_count" : 9
} ]
}
}
}
}

如我们所见,它为所有用户balu,hari和ram返回了存储桶。有没有办法只返回与前缀“ra”匹配的存储桶,即ram,rami,raman等的存储桶?

最佳答案

其实我知道了。术语聚合必须使用“include”字段,因此现在的查询将是:

curl -XPOST 'localhost:9200/test1/type1/_search?pretty' -d '
{
"size" : 0,
"aggs": {
"prefix_match_aggr": {
"filter" : { "prefix" : {"users" : "ra"}},
"aggs" : {
"actual_aggr" : {
"terms": {
"field" : "users",
"include" : "ra.*",
"size" : 0
}
}
}
}
}
}'

关于elasticsearch - 我们如何仅在Elasticsearch上匹配的前缀上存储聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873625/

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