2014-03-13 67 views
1

我有彈性搜索索引,其中包含兩個字段:'artist'和'track'。我如何管理像「深紫色煙霧」那樣的查詢,其中「深紫色」將成爲藝術家領域,而「煙霧」則是賽場的開端? 我試圖做這樣的:在ElasticSearch的兩個字段中搜索部分文本

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

但是,我認爲,ES試圖找到全文「深紫紅色煙霧」在藝術家和name字段,而不是搜索的藝術家和name字段的每個字,並返回將包含最高結果的文檔。

回答

1

你是對的,它正在搜索一個短語,因爲你將類型設置爲'phrase_prefix'。改爲使用其他類型。我相信'most_fields'將是最好的選擇,雖然'best_fields''cross_fields'也可能是一個合理的選擇。

the multi_match documentation

  • most_fields - 查找匹配的字段,它的文件,並結合來自各領域的_score。
  • cross_fields - 用同樣的分析儀處理田野,就好像它們是一個大田。查找任何字段中的每個單詞。
  • best_fields - 查找與任何字段匹配的文檔,但使用最佳字段中的_score。
相關問題