2012-09-20 99 views
0

俱樂部隊友這是我的籌碼:俱樂部隊友不適合在elasticsearch

  • 的Rails 3.2.6
  • MongoID〜> 2.5
  • 輪胎0.4.2
  • ElasticSearch服務器

我有一對夫婦一千產品我想在彈性搜索索引。這是我的映射:

mapping do 
    indexes :name, analyzer: 'snowball', boost: 100 
    indexes :description, analyzer: 'snowball' 
end 

不幸的是,搜索結果令人難以置信的不好。通過搜索「俱樂部隊友」,第一個結果是「club-mate-c」。第二個結果是「俱樂部隊友」。爲什麼「俱樂部隊友」不適合「俱樂部隊友」。 搜索結果由_score排序。沒有其他的。

我明白任何種類的反饋。 我相信這只是一個配置問題。

回答

2

您提供哪些數據您索引,數據如何制服,或你是如何查詢它的資料很少。

一個可能的問題是條款clubmate不在你的數據集很常見的,在你的碎片分佈不均。

默認情況下,術語頻率分別由每個碎片考慮,所以如果在一個碎片你有clubmate 3倍,而在另一碎片你有clubmatec一次,那麼第二個碎片可能會考慮clubmate比第一個碎片更相關。

典型地,具有大量數據的,術語頻率甚至自己出,所以這不再是一個問題。但是,使用少量數據時,您可以看到類似的問題。

解決方案:

  • 使用一個單一的碎片,而不是默認的5(如果你總是有一個小數據量,那麼這是更好的選擇)
  • 指數更多的數據
  • 添加search_type=dfs_query_then_fetch您的搜索參數,它會檢查所有碎片術語頻率運行查詢

注意前:search_type默認爲query_then_fetch而不是dfs_query_then_fetch因爲通常情況下,你將有足夠的數據,以確保偶數項的頻率,而且性能更好。

您可以添加到explain=1搜索參數,看看比分爲每個文檔已經計算出,這應該闡明這個問題更多的光線。

+0

偉大的答案克林頓,一如既往! – javanna

+0

非常感謝您的回答。索引中包含約14萬個文件。許多名字都是重複的。我對索引進行了一些調整。我意識到,作爲更多的屬性,我添加到索引,最糟糕的結果。如果我僅索引名稱,而沒有別的,那麼搜索就像預期的那樣工作。但是,儘快將索引和其他字段添加到索引中,搜索結果變得非常糟糕。 –

+0

然後,您需要提供explain = 1的「壞」查詢和結果的示例,並且如果您提供存儲在ES中的實際映射,而不是輪胎配置,則會有所幫助。 – DrTech