gpt4 book ai didi

elasticsearch - Elasticsearch查找孙子总数

转载 作者:行者123 更新时间:2023-12-03 00:47:17 24 4
gpt4 key购买 nike

我正在尝试使用Elasticsearch中的JOIN为我的数据建立映射,这些数据具有以下关系:公司与组之间是一对多关系,而组与用户之间是一对多关系。

这是我的映射:

PUT /company
{
"settings": {
"number_of_shards": 1, "number_of_replicas": 0,
"mapping.single_type": true
},
"mappings": {
"doc": {
"properties": {
"company": { "type": "text" },
"group": { "type": "text" },
"user": { "type": "text" },
"company_relations": {
"type": "join",
"relations": {
"company": "group",
"group": "user"
}
}
}
}
}
}

创建映射并填充索引之后。如何查询特定公司有多少用户?

最佳答案

首先,将您的映射更改为以下内容。原因是您无法在text字段上应用和执行聚合查询。您将需要keyword字段。

我也不建议您启用fielddata: true,因为一旦索引大小增加,它可能会影响性能,而且毫无意义。有关此here的更多信息

{ 
"settings":{
"number_of_shards":1,
"number_of_replicas":0,
"mapping.single_type":true
},
"mappings":{
"doc":{
"properties":{
"company":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword"
}
}
},
"group":{
"type":"text"
},
"user":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword"
}
}
},
"company_relations":{
"type":"join",
"relations":{
"company":"group",
"group":"user"
}
}
}
}
}
}

如下所述,提取您的文档(为简单起见,我只使用了相关字段,而不使用关系)

样本文档:
POST company/doc/1
{
"company": "daimler",
"group": "abc",
"user": "austin"
}

POST company/doc/2
{
"company": "daimler",
"group": "abc",
"user": "matt"
}

现在,您的查询可以像下面这样简单,其中我使用 Terms AggregationCardinality Aggregation来获取您要查找的内容:

汇总查询:
POST company/_search
{
"size": 0,
"query": {
"bool": {
"must": [
{
"term": {
"company.keyword": "daimler"
}
}
]
}
},
"aggs": {
"my_companies": {
"terms": {
"field": "company.keyword",
"size": 10
},
"aggs": {
"my_users_count": {
"cardinality": {
"field": "user.keyword"
}
}
}
}
}
}

请注意,我已经在 company.keyworduser.keyword字段上使用了聚合。

以下是回应的显示方式

响应:
{
"took" : 7,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"my_companies" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "daimler",
"doc_count" : 2,
"my_users_count" : {
"value" : 2
}
}
]
}
}
}

希望有帮助!

关于elasticsearch - Elasticsearch查找孙子总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58610058/

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