elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Elasticsearch Java API术语聚合怪异

Elasticsearch Java API术语聚合怪异,java,elasticsearch,Java,elasticsearch,我目前正在为数据结构如下的实体编制标签(行业)索引: industry: ["Consulting & Recruitment","Professional Services","Education & Training"] 我对查询应用术语分类,如下所示: AggregationBuilders.terms("industry").field("industry"); 我期望的结果是: Key: "Consulting & Recruitment" docCoun

我目前正在为数据结构如下的实体编制标签(行业)索引:

industry: ["Consulting & Recruitment","Professional Services","Education & Training"] 
我对查询应用术语分类,如下所示:

AggregationBuilders.terms("industry").field("industry");
我期望的结果是:

Key: "Consulting & Recruitment"
docCount: 100
我实际得到的是:

Key: "Consulting"
docCount: 100
Key: "Recruitment"
docCount: 100.
有没有办法纠正这个问题


谢谢

看起来该字段
行业
是使用默认分析器编制索引的,该分析器在单词边界处断开输入字符串,并将其小写。因此,在您的情况下,索引标记将是“咨询”、“招聘”、“专业”、“服务”、“教育”和“培训”。选择索引的标记。因此,它只选择“咨询”,而不是“咨询和招聘”。解决这一问题的方法是使字段
行业
不进行分析。在这种情况下,标记“咨询与招聘”、“专业服务”、“教育与培训”将按原样编制索引,您将获得预期的结果。

看起来,字段
行业
是使用默认分析器编制索引的,该分析器在单词边界处断开输入字符串,并将其小写。因此,在您的情况下,索引标记将是“咨询”、“招聘”、“专业”、“服务”、“教育”和“培训”。选择索引的标记。因此,它只选择“咨询”,而不是“咨询和招聘”。解决这一问题的方法是使字段
行业
不进行分析。在这种情况下,标记“咨询与招聘”、“专业服务”、“教育与培训”将按原样编制索引,您将获得预期的结果。

看起来,字段
行业
是使用默认分析器编制索引的,该分析器在单词边界处断开输入字符串,并将其小写。因此,在您的情况下,索引标记将是“咨询”、“招聘”、“专业”、“服务”、“教育”和“培训”。选择索引的标记。因此,它只选择“咨询”,而不是“咨询和招聘”。解决这一问题的方法是使字段
行业
不进行分析。在这种情况下,标记“咨询与招聘”、“专业服务”、“教育与培训”将按原样编制索引,您将获得预期的结果。

看起来,字段
行业
是使用默认分析器编制索引的,该分析器在单词边界处断开输入字符串,并将其小写。因此,在您的情况下,索引标记将是“咨询”、“招聘”、“专业”、“服务”、“教育”和“培训”。选择索引的标记。因此,它只选择“咨询”,而不是“咨询和招聘”。解决这一问题的方法是使字段
行业
不进行分析。在这种情况下,标记“咨询与招聘”、“专业服务”、“教育与培训”将按原样编制索引,您将获得预期的结果。

检查分析器中的此字段,我相信它设置为标准左右。 因此,您的内容被分解为表示标记的单词,而像“&”这样的常见动词在聚合时不被视为标记/键

弹性搜索使用这些标记(“招聘”、“顾问”)为您的文档编制索引。 因此,根据弹性搜索的主要功能,这种行为是预期的; 也就是说,当通过关键字“consulting”进行搜索时,ES将返回具有相关分数的文档或包含关键字“consulting”的简单单词

如果您坚持将“咨询和招聘”作为一个完整的密钥或令牌,那么您需要阻止令牌分配程序将其拆分为多个术语

检查,以自定义将这些标记拆分为不同标记的方式。 它就像设计一个记录器,把“咨询和招聘”看成是一个大字眼,但是你的令牌不会被很好的定义,因此你的搜索可能会受到影响。p> 一种解决方案是,您可以更改数据的格式,使用代表每个行业的行业类型代码,并使用另一个字段作为行业名称来包含文本内容。 索引文档时,字段行业类型代码为标记化/标准,字段行业名称为另一个附加名称。 对于常规搜索操作,使用字段行业名称;对于聚合,使用字段行业类型代码

{
  "mappings": {
    "industries" : {
      "properties" : {
        "industry-type-code" : {
          "type" :    "string",
          "analyzer": "standard"
        },
        "industry-name" : {
          "type" :   "string",
          "analyzer": "standard"
        }
      }
    }
  }
}

检查分析仪的这个字段,我相信它设置为标准左右。 因此,您的内容被分解为表示标记的单词,而像“&”这样的常见动词在聚合时不被视为标记/键

弹性搜索使用这些标记(“招聘”、“顾问”)为您的文档编制索引。 因此,根据弹性搜索的主要功能,这种行为是预期的; 也就是说,当通过关键字“consulting”进行搜索时,ES将返回具有相关分数的文档或包含关键字“consulting”的简单单词

如果您坚持将“咨询和招聘”作为一个完整的密钥或令牌,那么您需要阻止令牌分配程序将其拆分为多个术语

检查,以自定义将这些标记拆分为不同标记的方式。 它就像设计一个记录器,把“咨询和招聘”看成是一个大字眼,但是你的令牌不会被很好的定义,因此你的搜索可能会受到影响。p> 一种解决方案是,您可以更改数据的格式,使用代表每个行业的行业类型代码,并使用另一个字段作为行业名称来包含文本内容。 索引文档时,字段行业类型代码为标记化/标准,字段行业名称为另一个附加名称。 对于常规搜索操作,使用字段行业名称;对于聚合,使用字段行业类型代码

{
  "mappings": {
    "industries" : {
      "properties" : {
        "industry-type-code" : {
          "type" :    "string",
          "analyzer": "standard"
        },
        "industry-name" : {
          "type" :   "string",
          "analyzer": "standard"
        }
      }
    }
  }
}

检查分析仪的这个字段,我相信它设置为标准左右。 因此,您的内容被分解为表示标记的单词,而像“&”这样的常见动词在聚合时不被视为标记/键

弹性搜索使用这些标记为文档编制索引(