gpt4 book ai didi

elasticsearch - 嵌套字段上的ElasticSearch聚合

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

我有一个具有以下结构的索引。

{
"title": "Your top FIY tips",
"content": "Fix It Yourself in April 2012.",
"tags": [
{
"tagName": "Fix it yourself"
},
{
"tagName": "customer tips"
},
{
"tagName": "competition"
}
]
}

映射看起来像
{
"articles": {
"mappings": {
"article": {
"properties": {
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"tags": {
"type": "nested",
"properties": {
"tagName": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
}
}
}

我正在使用以下DSL查询来搜索“内容”和“标题”字段,并将结果缩小到某个“tagName”。然后使用聚合计数该查询中的标记名。
GET /articles/_search
{
"from": 1,
"size": 10,
"aggs": {
"tags": {
"nested": {
"path": "tags"
},
"aggs": {
"tags-tagnames": {
"terms": {
"field": "tags.tagName.raw"
}
}
}
}
},
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "FIY",
"fields": [
"title",
"content"
]
}
},
{
"nested": {
"query": {
"terms": {
"tags.tagName": [
"competition"
]
}
},
"path": "tags"
}
}
]
}
}
}

搜索查询和“tagNames”的过滤器工作正常。但是,聚合不是很有效。它似乎没有在结果中包含嵌套的查询数据。返回的汇总结果仅基于多重匹配搜索。

如何在聚合中包含嵌套查询。

样本文件位于

https://gist.github.com/anonymous/83bc2b1bfa0ac0d295d42297e1d76c00

最佳答案

讨论之后,我想我会更好地理解您的问题:

you wish to run the aggregation only on those documents that are included based on the "from" and "size" specified in the query.


"from"仅影响查询返回的命中,聚合将在与查询匹配的所有文档上进行计算。

由于Elasticsearch的工作方式,目前尚无法完成您想做的事情。 Elasticsearch中的搜索请求分为两个阶段:

Query phase

查询阶段是查询集群中的所有分片时,将返回与查询匹配的文档的文档ID。 聚合也在查询阶段运行。

Fetch phase

在获取阶段,与查询阶段的ID匹配的实际文档将被获取并包含在结果中。在您的方案中,您将需要在获取阶段运行聚合,以便仅对查询阶段包含的那些文档进行聚合。

影响聚合考虑哪些文档的唯一方法是在请求的查询中包括其他查询/过滤器,但就我而言,没有查询显示“排序顺序为1到10的文档”知道的。

您可以始终在此处针对特定用例汇总客户端,因为您正在有效地汇总每个标记中的逐字记录值

关于elasticsearch - 嵌套字段上的ElasticSearch聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42862288/

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