弹性搜索唯一值聚合
elasticsearch unique values aggregation
我想在名为 "name" 的字段中从 elasticsearch 中获取唯一值,
我不知道如何设置值必须唯一的条件。
这项工作的目的是从 elasticsearch 数据库中获取所有唯一名称。
So basically what i need is a aggregation query that fetch the unique values
谁能帮我解决这个问题,非常感谢。
您可以在 not_analyzed
字段上使用 terms
聚合。
但是,默认情况下这仅限于 10 个最流行的术语。您可以通过更新 terms
聚合的 size
参数来更改此设置。将其设置为 0
将允许您拥有最多 Integer.MAX_VALUE
个不同的术语(请参阅文档 here)。
这是一个示例映射:
POST terms
{
"mappings":{
"test":{
"properties":{
"title":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
正在添加一些文档:
POST terms/test
{
"title":"Foundation"
}
POST terms/test
{
"title":"Foundation & Empire"
}
最后,要求:
POST terms/_search?search_type=count
{
"aggs": {
"By Title": {
"terms": {
"field": "title",
"size": 0
}
}
}
}
会给你你所需要的:
"aggregations": {
"By Title": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Foundation",
"doc_count": 1
},
{
"key": "Foundation & Empire",
"doc_count": 1
}
]
}
}
请注意,如果您有大量术语,执行此请求的成本会非常昂贵。
我想在名为 "name" 的字段中从 elasticsearch 中获取唯一值, 我不知道如何设置值必须唯一的条件。
这项工作的目的是从 elasticsearch 数据库中获取所有唯一名称。
So basically what i need is a aggregation query that fetch the unique values
谁能帮我解决这个问题,非常感谢。
您可以在 not_analyzed
字段上使用 terms
聚合。
但是,默认情况下这仅限于 10 个最流行的术语。您可以通过更新 terms
聚合的 size
参数来更改此设置。将其设置为 0
将允许您拥有最多 Integer.MAX_VALUE
个不同的术语(请参阅文档 here)。
这是一个示例映射:
POST terms
{
"mappings":{
"test":{
"properties":{
"title":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
正在添加一些文档:
POST terms/test
{
"title":"Foundation"
}
POST terms/test
{
"title":"Foundation & Empire"
}
最后,要求:
POST terms/_search?search_type=count
{
"aggs": {
"By Title": {
"terms": {
"field": "title",
"size": 0
}
}
}
}
会给你你所需要的:
"aggregations": {
"By Title": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Foundation",
"doc_count": 1
},
{
"key": "Foundation & Empire",
"doc_count": 1
}
]
}
}
请注意,如果您有大量术语,执行此请求的成本会非常昂贵。