2014-06-07 118 views
0

我正在開發一個應用程序以在電子開始網站上搜索產品。我們將大約5,000,000種產品放入Solr索引中,包括所有常規字段:標題,說明等。而多字搜索短語可以很好地工作(例如「夏季涼鞋」或「高爾夫襯衫」)。單詞搜索不太好。Solr中的單詞搜索不準確

例如,當我搜索「吉他」時,Solr會返回一串提到吉他的產品。不管怎樣,不管怎樣,吉他音樂CD在指導如何彈吉他和吉他形鑰匙鏈方面的排名都高於實際的吉他。第一個實際的吉他出現在第120位左右。 從用戶的角度來看,我在想,如果我輸入「gutar」,我正在尋找真正的吉他。如果我需要關於如何彈吉他的指導,我會搜索「吉他演奏指南」,它的方式完美。

同樣的問題,如果你搜索「鞋」。它帶回了一堆音樂CD。顯然有很多這樣的標題或描述都有單詞鞋。

我發現的一個觀察結果是,搜索結果中的這些「不相關的」產品的標題和描述都非常短。我猜想這裏提出了每個單詞的重要性。如果你有一個音樂CD「法國鞋」的標題,並沒有太多其他的經過,索爾被欺騙。那麼我是否有辦法將更高級別的文檔分配給文本較長的文檔?我將不得不使用字段長度的概念來確定它是否是Solr中的一個簡單調整。

其他建議?

回答

0

你的觀察是正確的。在Solr評分中,有一些東西叫做長度標準化。它在一個較短的領域中比一個比較長的領域中的比賽更重要,其他條件相同。要禁用長度正常化的領域,solrconfig.xml設置omitNorms在該領域的定義爲真,這樣的:

<field name="text" type="text_general" indexed="true" stored="true" omitNorms="true" /> 

有解決您遇到的問題的幾種方法。其中之一是使用query elevation來確保您選擇的特定文檔顯示在給定查詢字符串的結果頂部(如guitar)。如果您想要提升一小組靜態文檔,例如如果在搜索guitar時只有幾個吉他,您總是希望顯示在搜索結果的頂部。

另一種方法是有一個「類別」欄,其中有像「吉他」,「吉他玩指南」等價值觀。使用Solr's DisMax query parser,在qf參數(即要搜索的字段)中包含類別以及其他字段(標題,說明等),並給予「類別」字段很大的提升。因爲「吉他」比「吉他演奏指南」短(因此默認長度歸一化),並且由於「類別」字段的大量提升,所以查詢字符串guitar應該使「吉他」類別中的文檔更高分數比「吉他演奏指南」類別中的文檔要高。

更好的是,詢問用戶他們是否真的在尋找吉他或吉他演奏指南。您可以在搜索結果中顯示類別,並讓用戶按類別細化搜索。或者你可以在你的網站自動提示功能(如果有)的問題,這是更好的問題。例如。在亞馬遜網站上,如果您鍵入「吉他」,它會猜測您可能正在尋找樂器,應用程序,玩具,書籍等,並讓您從中選擇。

Search for "guitar" on Amazon.com