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"
}
}
}
}
}
检查分析仪的这个字段,我相信它设置为标准左右。 因此,您的内容被分解为表示标记的单词,而像“&”这样的常见动词在聚合时不被视为标记/键 弹性搜索使用这些标记为文档编制索引(