2014-04-09 123 views
0

我有一個由三元組成的文件。例如:Lucene的查詢的名稱

  • George Bush | 說謊關於通過 | 史蒂夫
  • 布什 | 說謊關於通過 | 史蒂夫
  • 布什 | 說謊關於通過 | 史蒂夫

的第一個名字是主題二是動詞和第三個是對象。我意識到由三個字段(s-v-o)組成的Lucene索引,我想對主題和對象進行查詢。 特別是,當我運行查詢:

主題:「喬治·布什」和對象:「史蒂夫」

我只想檢索第一和第三三倍,而三重喬治·W的布什。

我試着用NGramsFilter,但它不工作,這是正常的。 我怎樣才能過濾出含有不同單詞的主題的三元組?我想找回布什,所以我不能做到這一點:

主題:「+喬治+布什」和對象:「+史蒂夫」

感謝您的幫助。

回答

0

如果你要搜索某個字段的全部內容完全匹配,你應該避免標化它。指定它作爲StringField會的工作,或可選,您可以使用KeywordTokenizer,並應用了一些濾波,它(LowercaseFilter,例如)。

上述工作完成後,如查詢:

+subject:("George Bush" George Bush) +object:Steve 

會得到你正在尋找的結果。


如果「喬治·布什」和「布什」之間的區別是更要處理特殊情況下,你總是可以的工作,到查詢:

+subject:(George Bush -W) +object:Steve 

你甚至可以把它變成SynonymFilter,我想,在分析過程中用「wbush」替代「w bush」或類似的東西。如果沒有「w」出現的話,那就不可能匹配「george w bush」上的任何文件,我想這就是你要找的東西。

+0

感謝您的幫助!我是Lucene的新手。 我無法搜索精確匹配,因爲我想在檢索「喬治布什」時也檢索單個布什。 我想知道是否有辦法搜索「喬治布什」,並匹配包含喬治,布什,喬治布什但沒有其他任何東西(在查詢條款中添加術語的字段)的字段。 對不起,我的壞解釋。 – miccia4

+0

上面提供的第一種方法正是通過要求精確匹配並分解查詢來枚舉要匹配的術語。 – femtoRgon