gpt4 book ai didi

elasticsearch - elasticsearch聚合词

转载 作者:行者123 更新时间:2023-12-02 22:32:23 25 4
gpt4 key购买 nike

我只是在浏览器插件(奇迹)中运行了一个聚合,如下图所示,只有一个文档与查询匹配,但以空格分隔却聚集在一起,但是我想针对不同的文档聚集是没有意义的。在这种情况下,应该只能是一组计数为1的键:“卓尔游侠”。
flex 搜索中这样做的真正方法是什么。
enter image description here

最佳答案

可能是因为您的heroname字段是analyzed,因此“卓尔游侠”被标记化并被索引为“卓尔”和“游侠”。

解决此问题的一种方法是将heroname字段转换为具有已分析部分(使用通配符查询搜索的部分)和另一个not_analyzed部分(可以聚合的部分)的多字段。

您应该像这样创建索引,并为heroname字段指定正确的映射

curl -XPUT localhost:9200/dota2 -d '{
"mappings": {
"agust": {
"properties": {
"heroname": {
"type": "string",
"fields": {
"raw: {
"type": "string",
"index": "not_analyzed"
}
}
},
... your other fields go here
}
}
}
}

然后,您可以在 heroname.raw字段而不是 heroname字段上运行聚合。

更新

如果您只想尝试 heroname字段,则可以修改该字段,而不必重新创建整个索引。如果运行以下命令,它将仅将新的 heroname.raw子字段添加到您现有的 heroname字段中。请注意,尽管如此,您仍然必须重新索引数据
curl -XPUT localhost:9200/dota2/_mapping/agust -d '{
"properties": {
"heroname": {
"type": "string",
"fields": {
"raw: {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}

然后,您可以继续在 heroname查询中使用 wildcard,但是您的汇总将如下所示:
{
"aggs": {
"asd": {
"terms": {
"field": "heroname.raw", <--- use the raw field here
"size": 0
}
}
}
}

关于elasticsearch - elasticsearch聚合词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32181301/

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