Elasticsearch计算忽略空格的术语

use*_*024 8 aggregation analyzer elasticsearch

使用ES 1.2.1

我的聚合

{
    "size": 0,
    "aggs": {
        "cities": {
            "terms": {
                "field": "city","size": 300000
            }
     }
 }
Run Code Online (Sandbox Code Playgroud)

}

问题是某些城市名​​称中包含空格并单独汇总.

比如洛杉矶

{
    "key": "Los",
    "doc_count": 2230
},
{
    "key": "Angeles",
    "doc_count": 2230
},
Run Code Online (Sandbox Code Playgroud)

我认为它与分析仪有关?我会使用哪一个不拆分空格?

Pai*_*ook 9

对于您要执行聚合的字段,我建议使用关键字分析器或根本不分析字段.从关键字分析器文档:

类型关键字的分析器,将整个流"标记"为单个标记.这对于诸如邮政编码,ID等数据非常有用.请注意,使用映射定义时,将字段标记为not_analyzed可能更有意义.

但是,如果您仍希望对该字段执行分析以包括其他搜索,请考虑使用ES 1.x的字段设置如字段/ multi_field文档中所述.这将允许您具有搜索字段的值和聚合的字段值.

  • 因此,如果我将多字段文档设置为正确,那么我的聚合就变成......"条款":{"field":"city.raw"}正确吗? (2认同)
  • 奇迹般有效!谢谢! (2认同)

Vin*_*han 6

有两种方法可以解决这个问题.

  1. 未经分析的方式 - 但这不会考虑不同的资本和小案例
  2. 关键字令牌化方式 - 在这里,我们可以将不同的术语映射为不同的案例.

博客中说明了这两个带有工作代码示例的概念.