我在弹性搜索中有索引,文档包含两个字段:'artist'和'track'。如何管理搜索“深紫色烟雾”等问题,“深紫色”将成为艺术家领域,“烟雾”是赛道领域的开端? 我试图这样做:
self.es.search(MultiMatchQuery(fields=['artist', 'name'], text='deep purple smoke', type='phrase_prefix'), 'mus', 'tracks')
但是,我认为,ES试图在艺术家和名称字段中找到全文“深紫色烟雾”,而不是搜索艺术家和名称字段中的每个单词,并返回包含最高结果的文档。
答案 0 :(得分:1)
您是正确的,因为您将类型设置为'phrase_prefix'
,所以它会搜索为短语。请改用其他类型。我相信'most_fields'
是最佳选择,但'best_fields'
或'cross_fields'
也可能是合理的选择。
每the multi_match documentation:
most_fields
- 查找与任何字段匹配的文档,并组合每个字段的_score。cross_fields
- 使用相同的分析器处理字段,就像它们是一个大字段一样。在任何字段中查找每个单词。best_fields
- 查找与任何字段匹配的文档,但使用最佳字段中的_score。