如何解决在Elastic Search中找到与查询匹配的关键字
我正在使用Elastic Search搜索多个索引。
当用户执行查询时,匹配项将在产生结果的1个或2个关键字之间划分。我希望能够针对每次匹配了解它来自哪个关键字。
因此,如果用户搜索“ ventolin治疗哮喘”,我想知道哪些匹配项是“ ventolin”,哪些匹配项是“哮喘”。
也就是说,对于此查询:
{
'query': {
'multi_match': {
'query': 'ventolin for asthma','fuzziness': 2,'prefix_length': 1,'type': 'best_fields','fields': ['term*']
}
}
}
这些热门歌曲:
{
...
'hits': {
'total': {
'value': 287,'relation': 'eq'
},'max_score': 10.301256,'hits': [{
'_index': 'normalized-term-mapping','_type': '_doc','_id': '194526','_score': 10.301256,'_source': {
'term': 'Ventolin Evohaler',...
}
},{
'_index': 'normalized-term-mapping','_id': '194362','_score': 8.529675,'_source': {
'term': 'Childhood Asthma',...
]
}
}
我想将第一个匹配项与关键字Ventolin匹配,将第二个匹配项与哮喘匹配。
请注意:
- 我使用模糊性== 2,因此关键字可能与匹配字词不完全匹配
- 索引使用一种分析器(不是复杂的分析器,但也不是琐碎的事情)
我可以尝试编写代码以使其与查询相匹配,但这实际上意味着在代码中重新实现弹性分析,这不是一个很好的解决方案。
有没有办法从Elastic的原始查询中获取匹配的词条?
解决方法
是的,有一种方法可以使用Highlight API获取匹配的字词。
您使用的是multi_match
查询,因此默认突出显示选项可能已足够。您确实需要使用以下内容指定要突出显示的字段:
{
'query': {
'multi_match': {
'query': 'ventolin for asthma','fuzziness': 2,'prefix_length': 1,'type': 'best_fields','fields': ['term*']
}
},'highlight': {
'fields': {
'term*': {}
}
}
}
但是,这不会返回匹配项的数组。相反,您将获得带有现有匹配标记的字段(通常使用HTML,但您可以自定义它)。如果需要,可以使用该标记对各个匹配进行后期处理和隔离。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。