2011-06-10 88 views
0

我使用Umbraco並遇到了Lucene。我在Lucene上發現了很多代碼和文章,但我仍然無法構建可接受的搜索。Lucene.NET查詢+突出顯示

我有很多字段可以搜索,例如。 「節點名稱」和「bodyText的」

我需要什麼:

  • 當我搜索「男鞋」,它應該只返回有兩個「男人」和「鞋」的結果,但也迴歸nodeName只有「鞋子」,bodyText只有「男士」的頁面。

  • 當我搜索「鞋子」時,我想要包含「鞋子」或「鞋子」的結果。但不是「鋤頭」如果可能的話

  • 提振節點名稱領域

  • 獲取bodyText的一個片段,包含匹配字(S)

  • 突出顯示在頁面名稱和兩個匹配的單詞片段的正文文本

有沒有人曾經這樣做過?

+0

是Lucene的做所有你需要和* *得多多。然而,由於你看起來是一個新手,我推薦使用Apache Solr(這是一個圍繞Lucene構建的搜索服務器,並提供了許多開箱即用的功能,而不需要修改內部文件) – Mikos 2011-06-10 11:29:27

+0

謝謝。那用Umbraco ...? – Aximili 2011-06-14 00:12:26

回答

1

這可能會讓你開始。

var manager = ExamineManager.Instance; 
var searcher = manager.SearchProviderCollection["YOURSearcher"]; 
var query = manager.SearchProviderCollection["YOURSearcher"].CreateSearchCriteria(BooleanOperation.Or) 
    .Field("nodeName", keywords.Boost(10)) 
    .Or().Field("nodeName", keywords.Fuzzy()) 
    .Or().Field("bodyContent", keywords.Boost(5)) 
    .Or().Field("otherField", keywords.Boost(3)); 
var results = searcher.Search(query.Compile());
+0

謝謝Kieran!什麼是關鍵字?它不是字符串嗎?因爲字符串沒有Boost方法。 – Aximili 2011-06-10 06:54:20

+0

它是字符串的擴展,必須使用Examine.LuceneEngine.SearchCriteria; – Aximili 2011-06-14 00:57:46

+1

我搜索多個詞,它永遠不會返回任何結果 – Aximili 2011-06-14 01:27:03