在ElasticSearch的两个字段中搜索部分文本

时间:2014-03-13 14:30:54

标签: lucene elasticsearch

我在弹性搜索中有索引,文档包含两个字段:'artist'和'track'。如何管理搜索“深紫色烟雾”等问题,“深紫色”将成为艺术家领域,“烟雾”是赛道领域的开端? 我试图这样做:

self.es.search(MultiMatchQuery(fields=['artist', 'name'], text='deep purple smoke', type='phrase_prefix'), 'mus', 'tracks')

但是,我认为,ES试图在艺术家和名称字段中找到全文“深紫色烟雾”,而不是搜索艺术家和名称字段中的每个单词,并返回包含最高结果的文档。

1 个答案:

答案 0 :(得分:1)

您是正确的,因为您将类型设置为'phrase_prefix',所以它会搜索为短语。请改用其他类型。我相信'most_fields'是最佳选择,但'best_fields''cross_fields'也可能是合理的选择。

the multi_match documentation

  • most_fields - 查找与任何字段匹配的文档,并组合每个字段的_score。
  • cross_fields - 使用相同的分析器处理字段,就像它们是一个大字段一样。在任何字段中查找每个单词。
  • best_fields - 查找与任何字段匹配的文档,但使用最佳字段中的_score。