如何获得术语聚合以匹配总字符串?

How can I get term aggregation to match a total string?

我有一些数据正在使用 elasticsearch 1.5.2 进行聚合,当我在 city 之类的字段上进行术语聚合时,存储桶与该字段中的完整字符串不匹配。例如)如果城市是圣路易斯,那么一个桶将是 St.,另一个是 Louis。有谁知道如何确保它在聚合时进入 St. Louis 存储桶?

注意:这可能是由于正在分析的数据造成的,我很确定在比较和搜索等时会分解字符串。

你是对的。因此,您只需使用此映射将 city 字段映射为 not_analyzed 字符串:

{
  "your_type" : {
    "properties" : {
      "city" : {
        "type" : "string",
        "index" : "analyzed",
        "fields" : {
          "raw" : {"type" : "string", "index" : "not_analyzed"}
        }
      }
    }
  }
}

然后您可以简单地 运行 您在 city.raw 字段(包含未分析的值,即 St. Louis)而不是 city 上的聚合被分析并将内容分解成几个标记(即 stlouis)。

如果您事先知道,您将永远不需要分析字段,您可以像这样简单地存储 not_analyzed 字段(即不需要 fields 部分声明一个 multi -字段):

{
  "your_type" : {
    "properties" : {
      "city" : {
        "type" : "string",
        "index" : "not_analyzed"
      }
    }
  }
}