gpt4 book ai didi

elasticsearch - 匹配查询中字段的唯一值的Elasticsearch列表

转载 作者:行者123 更新时间:2023-12-03 01:39:47 33 4
gpt4 key购买 nike

我正在使用 Elasticsearch 来获取所有同类产品(例如相机)的列表,但是我想根据从匹配查询中得到的结果动态填充制造商列表。

{
"query": {
"match": {
"product_type" : "CAMERA"
}
}
}

给我这些项目的 list (在删除无关数据之后)
{
"_score": 11.234668,
"_source": {
"product_type": "CAMERA",
"mfg_name": "SONY"
}
}

我无法汇总文档中的所有 mfg_name,因为它也将包含其他产品的制造商。我想做的是,获取我查询的产品类型的所有 mfg_name

Elasticsearch 本身支持吗?我可以链接查询,以便 match查询对 aggs查询的输出进行操作吗?还是我必须编写一项服务才能逐项检查 list 并获得 list ?

编辑:由于字段数据默认情况下在文本字段上处于禁用状态,因此我使用它来获取聚合
{
"size": 0,
"aggs" : {
"manufacturer" : {
"terms" : { "field" : "mfg_name.keyword", "size" : 500 }
}
}}

最佳答案

您可以汇总查询结果。只需要在同一查询中全部写入即可。

Aggregation over the query results

Terms aggregation

您应该将mfg_name字段索引为未分析的字符串,以便能够对该字段进行汇总。否则,您将得到奇怪的结果,例如SON的聚合和ONY的聚合。

在此处做出响应即可粘贴代码。

更新索引

PUT my_index {  "mappings": {
"doc": {
"properties": {
"mfg_name": { "type": "text" },
"mfg_name_na": { "type": "text" , index: "not_analyzed" }
}
}
}
}

我要将mfg_name复制到一个未分析的字段,以便您可以对原始字段进行全文搜索,然后对未分析的字段进行汇总。

然后重新索引,您可以这样查询:
{
"query": {
"match": {
"product_type": "CAMERA"
}
},
"aggs": {
"producers": {
"terms": {
"field": "mfg_name_na"
}
}
}
}

您应该收到一个包含存储桶聚合和所需数据的响应。

关于elasticsearch - 匹配查询中字段的唯一值的Elasticsearch列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48700138/

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