2009-02-10 60 views
6

我試圖將Lucene.net合併到我的網頁搜索中。如何從Lucene.net中獲得更多

目前,我有一個lucene.net索引,其中包含+1百萬個文檔,每個文檔有7個字段。 最後一個字段是連接了以前字段內容的「全部」字段。搜索所有領域只是極其快速:)

但我覺得還有更多的東西在這裏找到。如何在不使用「全部」字段的情況下搜索一個或多個以空格分隔的字符串搜索所有字段?
我想能夠給某些領域的權重。此外,如果搜索包含關於何處發生點擊的信息,那麼這將非常好,因此我可以在結果中顯示它。

我認爲這是所有可能的,但我不immildatelly看到如何。
任何幫助?

回答

3

我不認爲你需要維護一個「全部」字段。

  1. 查看使用「MultiFieldQueryParser」。它不接受查詢解析器使用的單個默認字段,而是接受一個字段名稱數組(除了索引分析器)。
  2. 期限提升應按照「QueryParser」工作(即不需要特殊操作)。我應該補充一點,我發現標準評分對我來說似乎沒有問題(場地的長度,比賽的數量等),而不使用提升的術語。
  3. Lucene.Net(當然,SVN 2.3目前的版本)包含來自Java源代碼的Highlight包的一個端口。它確實有一些怪癖(特別是其中最重要的一點是它可能會非常棘手),但它基本上可行。

好運

1

你必須得到Lucene in Action。雖然有關原始(即Java)Lucene實現,它包含所有您需要的信息:關於增強,熒光筆,qwery分析器等。

+0

如果這原來是解決方案,我想是的,我會dftly考慮讓自己更Lucene的資源。看起來這將取代我迄今爲止的整個搜索算法。並且我不介意:) – 2009-02-10 14:17:10

4

我們做類似的事情,訣竅是在您的查詢字符串中指定字段:

(+Tier1:ribbon^1)^4 OR (+Tier2:ribbon^1)^4 OR (+Tier3:ribbon^1) OR (+Tier4:q*ribbon*^1)^12 

在上例中,用戶在我們的應用程序中搜索「功能區」。我們在不同領域有不同的數據段,最終的「Tier4」字段包含所有以前的術語連接在一起。我們在前面加上場的「Q」,所以我們能做的領先野生卡,也:

(+Tier4:q*ribbon*^1)^12 

最後,我們使用提升與插入符號(^)。這最終會以不同的方式加權。經過一段時間纔得到提升,我仍然不滿意,但他們確實產生了很大的影響。

+0

所以如果它說(+ Tier1:ribbon^1)^ 4這意味着,在字段Tier1中查找單詞ribbon並給出這個權重爲4的結果? 你有一個簡單的資源如何創建查詢字符串? – 2009-02-10 14:18:30

+0

愚蠢的是,領先的通配符需要像前置字符這樣的技巧。任何想法爲什麼? – 2009-02-10 14:23:52

相關問題