2015-02-23 114 views
0

是否可以指定詞的順序對於Lucene鄰近搜索而言是否重要?Lucene近似搜索中詞的順序

「WORD1 WORD2」〜3 =>順序的單詞做物(序=真)

是有編寫一個查詢的量,順序無關緊要的等效方式?喜歡的東西:

「字詞1字詞2」〜3倍=>話不要緊的順序(序= FALSE)

我知道,對於一個SpanNearQuery中序屬性決定了訂單的事項或不但不能告訴QueryParser如果InOrder對於特定的SpanNearQuery應該是true或false。

我需要編寫自己的QueryParser來支持自定義語法來處理這些查詢嗎?

回答

2

你有它落後。 QueryParser始終將InOrder設置爲false。

InOrder = false不,但是,意味着順序並不重要。這意味着訂單沒有嚴格保持。順序仍然很重要,因爲接近度值是一個levenshtein距離。交換兩個單詞的順序會使距離增加2.如果嘗試將距離增加兩個,您可能會看到相反順序的匹配。

至於是否可以構造查詢來設置是否應在查詢解析器中維護順序:否。您不能。它不支持。

您可以切換到使用Surround Query Parser,該設計用於處理更復雜的跨度查詢。但是,語法是,其他不同,我不知道.Net版本是否在那裏。它是在Lucene 3.0.3左右,但它是一個貢獻包。

+0

感謝您的回答!我正在使用ComplexPhraseQueryParser的一個自我移植的.net版本,其中InOrder始終爲真。這就是爲什麼我認爲這也是QueryParser的默認行爲。不幸的是,似乎Lucene.Net和Lucene.Net.Contrib不包含環繞軟件包。所以我想我要麼等到Lucene.Net的新版本發佈或像Surround QueryParser那樣編寫自己的東西 – dennis 2015-02-24 08:59:57

+0

我剛剛測試了InOrder屬性,結果表明InOrder = false條件的順序真的是這樣無關緊要: 「term1 term2」slop = 0 InOrder = true結果爲9個匹配, 「term2 term1」slop = 0 InOrder = true結果爲5個匹配, 「term1 term2」slop = 0 InOrder = false結果爲14點擊, 「term2 term1」slop = 0 InOrder = false結果有14個匹配, 或者我錯過了什麼? – dennis 2015-02-24 09:37:32