2016-04-05 70 views
1

我使用Lucene.NET來索引一組文檔的內容。我的索引包含幾個字段,但我主要關心的是查詢「內容」字段。我試圖找出索引的最佳方式,以及創建查詢,以滿足要求。如何使用Lucene索引和搜索多個術語和短語

以下是當前要求:

  • 能夠搜索多個關鍵字,如「飛機火車汽車」(減去引號)。這應該給我包含任何條款的所有文件,但包含所有三個文件的文件應該在頂部
  • 能夠搜索短語,例如「飛機,火車和汽車」(帶引號)只有在他們在一起時才符合。
  • 至於停用詞,我會完全忽略它們或者包括它們。
  • 至於標點或特殊字符,相同的交易。我可以完全忽略它們,或者包含它們。
  • 最後兩個只需要一致,不一定與對方,但索引器和搜索器如何處理它們。所以我只是不想讓用戶搜索「飛機和火車」,但它不匹配包含該短語的文檔,因爲索引器取出了「and」,但搜索者試圖搜索特定的短語。

一些文件很大,所以我認爲我們不想做Field.Store.Yes,對嗎?除非我們必須爲我們需要做的事情做準備。

回答

3

您列出的要求應該使用lucene的標準分析器和queryparser來處理。確保在IndexWriter和QueryParser中使用相同的分析器。停止詞被消除。標點通常被忽視,雖然規則是多一點參與,只是忽略標點符號(見UAX #29, section 4,如果你有興趣的細節)

如果您嘗試運行Lucene demo,你會發現它只是就像你在這裏指定的一樣。

至於存儲的領域,你說得對,是的。如果需要從索引中檢索該字段,請存儲該字段。您不需要檢索的大字段不需要存儲。