2015-02-23 73 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