是否可以指定单词的顺序是否对Lucene邻近搜索很重要?
" word1 word2" ~3 =>单词的顺序很重要(InOrder = true)
是否有一种等效的方式来编写一个订单并不重要的查询?类似的东西:
" word1 word2" ~3x =>单词顺序无关紧要(InOrder = false)
我知道对于SpanNearQuery,InOrder属性确定订单是否重要,但不能告诉QueryParser如果InOrder对于特定的SpanNearQuery应该是true还是false。
我是否需要编写自己的QueryParser,支持自定义语法来处理此类查询?
答案 0 :(得分:2)
你让它落后了。 QueryParser
始终将InOrder
设置为false。
InOrder = false
并不代表订单无关紧要。这意味着订单没有严格保持。秩序仍然很重要,因为接近值是levenshtein距离。交换两个单词的顺序会使距离增加2.如果你尝试将距离增加两个,你可能会看到相反顺序的匹配。
至于您是否可以构建查询以设置是否应在查询解析器中维护顺序:否。您不能。它不支持这一点。
您可以切换到使用Surround Query Parser,它旨在处理更复杂的跨度查询。但是,语法很多不同,我不知道.Net版本是否存在。它在Lucene 3.0.3附近,但它当时是一个贡献包。