2010-10-29 95 views
7

這更多的是理論問題而不是實踐。我正在研究一個非常簡單的鏈接目錄。整個模型與Dmoz或Yahoo目錄類似,只是每個條目都具有某些附加屬性。檢索技巧推薦

我有分層分類法在多對多關係的所有條目上工作,所有條目現在分類到這些類別,並且一切似乎都正常工作。現在,如果沒有搜索選項,有什麼用途?

下面是關於我的模型的更多細節:每個條目都有一個標題,描述,URL和幾個社交個人資料:YouTube,Twitter,Flickr和其他幾個。每個條目都可以附加一個標誌,以及標籤的隱藏字段。此外,標題和說明以三種不同的語言存儲。所以基本上我想要的搜索結果是:

  1. 相關(包括分類)
  2. 那些可能與標識
  3. 那些可能用100%填寫了個人資料

我已經嘗試過獅身人面像,目前正在與Lucene合作,但似乎我沒有在理論上獲得搜索權。我希望這樣做是有道理的,即填充條目應該比其他條目更高,但我無法真正弄清楚分數。如果在整個描述中只有一個單詞匹配,我不喜歡不相關的條目出現在頂部,因爲標題更相關。

所以我的問題是 - 是否有任何書籍,技術甚至是其他搜索引擎(如果獅身人面像和Lucene是不夠好),你會推薦這件事?我不僅希望完全控制搜索結果及其排名,還要爲我的訪問者提供正確和相關的信息。

酷的文章鏈接也讚賞!

而且沒有,我不會試圖重建谷歌:)

謝謝:)

+1

P.S.我願意爲最佳答案提供獎勵。 – kovshenin 2010-10-29 08:55:03

回答

4

我敢肯定,Lucene是不夠的。我們已經解決了類似的任務,並做得很好。這裏有一些提示,我可以建議你回顧我在Lucene.Net的項目。

分類:

  • 類別已表示爲分貝的整數鍵,因此,每個文檔具有Number類型的字段「CATEGORY」的多個實例。例如文件:[1,2,5,10,'輪子'] - 意味着輪子屬於每個類別。

非搜索領域(標誌,社會知名度):

  • 當然你也可以存儲在Lucene的非索引字段不可搜索的值。但是我們已經將所有與產品有關的信息存儲在數據庫中,以避免重建Lucene的索引。所以Lucene只擁有產品的ID和索引,但是存儲了關鍵字段的值。

三種語言和多領域:

  • 我們只有2種語言。因此,不同的產品標題可以存儲在同一個Lucene的文檔中,並與產品的單一ID相關聯(因爲我之前編寫的ID是指DB)。這允許您搜索產品,即使用戶請求使用混合語言。
  • 顯然標題,標籤和說明對搜索結果有不同的權重。 Lucene通過分配字段權重來處理它。
5

優秀圖書:Lucene in Action (2nd edition)

當我們開始使用Lucene我們有了第一個版本,它真的需要通過你所需要的一切一步一步來。強烈推薦。第二版更新爲最新版本(3.x.x)。

Tf-Idf算法對於較大的文本效果很好,但是如果你有一個類似記錄的結構,它可能會適得其反:有些術語的文檔被認爲比具有多個術語的文檔更「相關」。使用Lucene,你可以使用它,但你必須弄髒你的手。

你基本上需要做的是boost your title field,所以它變得更相關。您也可以change the scoring mechanism爲擁有更多信息的文檔分配更高的分數。

玩得開心。如果你無法弄清楚,Lucene mailinglist有很好的支持。

1

Lucene或Solr會完成這項工作。 Solr建立在lucene之上,see here for more info

我會去solr。下載+設置它簡單快捷。開始使用教程和我的link collection。相關性在solr中應該沒問題,並且很容易調整。

看着Dewfy和Matthijs Bierman回答一些好的問題。

然後選擇dismax查詢處理程序,您可以選擇具有某些屬性的文檔。

E.g.對於完整配置文件的百分比,您可以定義一個單獨的字段'profile_completness',那麼您可以將profile_completeness添加到dismax處理程序的bf(boostfunction)中:配置文件越完整,這些文檔就越多。

我之前提到過,您可以輕鬆調整相關性:例如,你可以設置bf來。如:bf=title^10 tags^5 profile_completeness^1

「可能與標識」可以通過升壓查詢:bq=logo:[* TO *]^1解決。其中logo:[* TO *]的含義是「只有包含字段徽標的文檔」

要顯示深度嵌套的類別樹,您需要在內存中創建該樹,並使用特殊導入來提供solr。我們有一個工作的應用程序。您可以使用our approach

如果您需要進一步的幫助,請不要猶豫,以發表評論。

2

我會嘗試添加Matthijs,Dewfy和Karussell的精美答案。 基本上,您正試圖改善您的搜索相關性。 我建議你閱讀Grant Ingersoll的Debugging Search Application Relevance Issues和他的Optimizing Findability in Lucene and Solr以及他的Practical Relevance slides

對於不同的語言和刻面我建議你使用Solr。它是一個使用Lucene構建的搜索引擎,易於使用。它可以通過對每種語言使用不同的Solr Core來支持多種語言。