gpt4 book ai didi

ruby-on-rails - Elasticsearch 聚合中的首字母匹配

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

我正在将我的 elasticsearch 从使用分面迁移到使用聚合,我想创建一个查询,其中聚合代表所有以特定字母开头的创建者姓名。

我已经像这样创建了一个嵌套索引:

 indexes creators, type: 'nested' do
indexes :name, type: 'string', analyzer: 'caseinsensitive', index: 'not_analyzed'
end

以下查询将返回创作者姓名以“b”开头的所有项目。到目前为止效果很好。

      {
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "creators",
"query": {
"prefix": {
"creators.name": {
"value": "b"
}
}
}
}
}
}
},
"aggregations": {
"creators": {
"nested": {
"path": "creators"
},
"aggs": {
"name": {
"terms": {
"field": "creators.name",
"size": 100
}
}
}
}
}
}

但是,查询的聚合部分返回结果的所有聚合,包括不以“b”开头的实例创建者名称。例如,如果我有一个项目有两个创作者:

           "creators": [
{
"name": "Beyonce"
},
{
"name": "JayZ"
}
],

聚合结果将包括 JayZ 和 Beyonce。和大多数人一样,我只想要碧昂丝。

最佳答案

试试这个查询,看看结果如何:

{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "creators",
"query": {
"prefix": {
"creators.name": {
"value": "b"
}
}
}
}
}
}
},
"aggregations": {
"creators": {
"nested": {
"path": "creators"
},
"aggs": {
"NAME": {
"filter": {
"prefix": {
"creators.name": "b"
}
},
"aggs": {
"name": {
"terms": {
"field": "creators.name",
"size": 100
}
}
}
}
}
}
}
}

关于ruby-on-rails - Elasticsearch 聚合中的首字母匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399734/

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