【发布时间】:2020-08-12 09:43:10
【问题描述】:
我正在使用 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',
'_type': '_doc',
'_id': '194362',
'_score': 8.529675,
'_source': {
'term': 'Childhood Asthma',
...
}
},
...
]
}
}
我想将第一个匹配项与关键字 Ventolin 匹配,第二个匹配项与 Asthma 匹配。
注意:
- 我使用 fuzziness == 2,因此关键字可能与命中词不完全匹配
- 索引使用分析器(不是复杂的,但不是微不足道的)
我可以尝试编写代码以将术语与查询匹配,但这实际上意味着在代码中重新实现弹性分析,这不是一个很好的解决方案。
有没有办法从 Elastic 的原始查询中获取匹配的术语?
【问题讨论】:
标签: elasticsearch