gpt4 book ai didi

Elasticsearch 不同的过滤器值

转载 作者:行者123 更新时间:2023-11-29 02:51:29 25 4
gpt4 key购买 nike

我在 elasticsearch 中有一个大型文档存储,我想检索不同的过滤器值以显示在 HTML 下拉菜单上。

一个例子是这样的

[    {        "name": "John Doe",        "deparments": [            {                "name": "Accounts"            },            {                "name": "Management"            }        ]    },    {        "name": "Jane Smith",        "deparments": [            {                "name": "IT"            },            {                "name": "Management"            }        ]    }]

下拉菜单应该有一个部门列表,即 IT、客户和管理。

请好心人指点我从 elasticsearch 中检索不同部门列表的正确方向?

谢谢

最佳答案

这是一项针对terms 聚合 ( documentation ) 的工作。

您可以像这样拥有不同的 departments 值:

POST company/employee/_search
{
"size":0,
"aggs": {
"by_departments": {
"terms": {
"field": "departments.name",
"size": 0 //see note 1
}
}
}
}

在您的示例中,输出:

{
...
"aggregations": {
"by_departments": {
"buckets": [
{
"key": "management", //see note 2
"doc_count": 2
},
{
"key": "accounts",
"doc_count": 1
},
{
"key": "it",
"doc_count": 1
}
]
}
}
}

两个附加说明:

  • size 设置为 0 会将最大桶数设置为 Integer.MAX_VALUE。如果有太多 departments 不同的值,请不要使用它。
  • 您可以看到键是 terms 分析 departments 值的结果。请务必在映射为 not_analyzed 的字段上使用您的 terms 聚合。

例如,使用我们的默认映射(departments.name 是一个analyzed 字符串),添加这个员工:

{
"name": "Bill Gates",
"departments": [
{
"name": "IT"
},
{
"name": "Human Resource"
}
]
}

会造成这样的结果:

{
...
"aggregations": {
"by_departments": {
"buckets": [
{
"key": "it",
"doc_count": 2
},
{
"key": "management",
"doc_count": 2
},
{
"key": "accounts",
"doc_count": 1
},
{
"key": "human",
"doc_count": 1
},
{
"key": "resource",
"doc_count": 1
}
]
}
}
}

有了正确的映射:

POST company
{
"mappings": {
"employee": {
"properties": {
"name": {
"type": "string"
},
"departments": {
"type": "object",
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}

同样的请求最终输出:

{
...
"aggregations": {
"by_departments": {
"buckets": [
{
"key": "IT",
"doc_count": 2
},
{
"key": "Management",
"doc_count": 2
},
{
"key": "Accounts",
"doc_count": 1
},
{
"key": "Human Resource",
"doc_count": 1
}
]
}
}
}

希望这对您有所帮助!

关于Elasticsearch 不同的过滤器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27020926/

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