因此,我们的Elasticsearch集群存在问题,我们通过该集群创建了一些使用某个字段创建的旧分析“已分析”。现在,此字段可以包含“ - ”或“_”符号,我们的一个查询将按此字段进行聚合。 由于正在分析此字段,如果它包含任何这些字符,则它将按其包含的每个字进行聚合。即:
“analyzeField”:“我喜欢苹果”
当我们抛出一个由它聚合的查询时:
{
"query":{
"filtered":{
"filter":{
[...]
}
}
},
"aggs":{
"type":{
"terms":{
"field":"analyzedField"
}
}
}
}
它返回由字段的每个术语聚合的结果,如:
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"failed": 0
},
"hits": {
"total": 192,
"max_score": 0,
"hits": []
},
"aggregations": {
"type": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "I",
"doc_count": 192
},
{
"key": "like",
"doc_count": 192
},
{
"key": "apples",
"doc_count": 192
}
而不是像:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0,
"hits": []
},
"aggregations": {
"type": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "I-like-apples",
"doc_count": 192
}
不幸的是,由于它们的大小,将该字段重新创建为“未分析”并不是一种选择。
那么,我们还有其他选择吗?可以某种方式修改映射,以便它不再完全重新创建索引就停止分析该字段吗?
我们如何修改它的查询,将该字段视为纯文本而不是术语?
我的ElasticSearch知识相当基础,如果我写了一些废话,请原谅。
谢谢 问候