gpt4 book ai didi

elasticsearch - Elasticsearch中 splinter 的聚集

转载 作者:行者123 更新时间:2023-12-03 00:36:06 26 4
gpt4 key购买 nike

在索引的names字段中执行术语汇总时,我得到了错误的结果。
以下是我使用的names字段的映射:

{
"dbnames": {
"properties": {
"names": {
"type": "string",
"index": "not_analyzed"
}
}
}
}

这是我在现场进行简单的 terms聚合得到的结果:
"aggregations": {
"names": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "John Martin",
"doc_count": 1
},
{
"key": "John martin",
"doc_count": 1
},
{
"key": " Victor Moses",
"doc_count": 1
}
]
}
}

如您所见,在聚合中,我具有相同的名称,不同的大小写显示为不同的存储桶。我在这里想要的是无论大小写,名称都应该合并在一起。

最佳答案

最简单的方法是确保在建立索引时正确区分names字段的值。

如果这不是一个选择,那么实现此方法的另一种方法是定义一个将为您执行此操作的分析器,并将该分析器设置为index_analyzer字段的names。这样的自定义分析器将需要使用 keyword tokenizer(即,将字段的整个值作为单个标记)和 lowercase token filter(即,将值小写)

curl -XPUT localhost:9200/your_index -d '{
"settings": {
"index": {
"analysis": {
"analyzer": {
"casing": { <--- custom casing analyzer
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
}
}
},
"mappings": {
"your_type": {
"properties": {
"names": {
"type": "string",
"index_analyzer": "casing" <--- use your custom analyzer
}
}
}
}
}'

然后我们可以索引一些数据:
curl -XPOST localhost:9200/your_index/your_type/_bulk -d '
{"index":{}}
{"names": "John Martin"}
{"index":{}}
{"names": "John martin"}
{"index":{}}
{"names": "Victor Moses"}
'

最后, terms字段上的 names聚合将返回您的预期结果:
curl -XPOST localhost:9200/your_index/your_type/_search-d '{
"size": 0,
"aggs": {
"dbnames": {
"terms": {
"field": "names"
}
}
}
}'

结果:
{
"dbnames": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "john martin",
"doc_count": 2
},
{
"key": "victor moses",
"doc_count": 1
}
]
}
}

关于elasticsearch - Elasticsearch中 splinter 的聚集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33428307/

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