elasticsearch Elasticsearch不同的过滤器值,elasticsearch,filter,distinct,nosql,elasticsearch,Filter,Distinct,Nosql" /> elasticsearch Elasticsearch不同的过滤器值,elasticsearch,filter,distinct,nosql,elasticsearch,Filter,Distinct,Nosql" />

elasticsearch Elasticsearch不同的过滤器值

elasticsearch Elasticsearch不同的过滤器值,elasticsearch,filter,distinct,nosql,elasticsearch,Filter,Distinct,Nosql,我在elasticsearch中有一个很大的文档存储,希望检索不同的过滤器值,以便在HTML下拉列表中显示 例如 [ { "name": "John Doe", "deparments": [ { "name": "Accounts" }, { "name": "Management" }

我在elasticsearch中有一个很大的文档存储,希望检索不同的过滤器值,以便在HTML下拉列表中显示

例如

[ { "name": "John Doe", "deparments": [ { "name": "Accounts" }, { "name": "Management" } ] }, { "name": "Jane Smith", "deparments": [ { "name": "IT" }, { "name": "Management" } ] } ] [ { “姓名”:“约翰·多伊”, “部门”:[ { “名称”:“账户” }, { “名称”:“管理层” } ] }, { “姓名”:“简·史密斯”, “部门”:[ { “名称”:“它” }, { “名称”:“管理层” } ] } ] 下拉列表应包含部门列表,即IT、账户和管理

请一些好心的人告诉我从elasticsearch检索不同部门列表的正确方向好吗


谢谢

这是一项针对
术语
聚合()的作业

您可以有如下不同的
部门
值:

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\u值。如果有太多不同的
    部门
    值,请不要使用它
  • 您可以看到,这些键是分析部门值的结果。确保在映射为未分析的
    字段上使用
    术语
    聚合
例如,使用我们的默认映射(
departments.name
是一个
analysisted
字符串),添加此员工:

{
  "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
            }
         ]
      }
   }
}

希望这有帮助

完美答案!谢谢你,汤姆。