我的索引在分析器默认字段中包含值abc
和def
,并且属于两个不同的文档。当我执行查询abc OR def
时,我得到了索引中两个文档的命中。但是当我使用abc OR d?f
时,我只会收到包含abc
的文档的匹配。当我使用d?f
查询索引时,我会看到包含def
的文档。
当我查看abc OR d?f
的已解析查询时,我看到了正确的结果。这意味着解析了BooleanQuery
,其中WildcardQuery
作为第二个子句。
我做错了吗?
在我的应用程序中,我还在上面指定的一个上面有另一个布尔子句。这匹配的字段与上面指定的字段不同。因此,我的案例中的完整查询将是:user:john AND (abc OR d?f)
。但我索引中的所有文档都在john
字段中包含user
。所以这应该不是问题。
我正在使用lucene 3.0.3。
修改
我使用luke查看了索引。在那里,我看到在重写的查询中,术语d?f
被()
取代。知道查询显然只匹配abc
。但是为什么在重写查询时会替换通配符?
答案 0 :(得分:0)
这只是我的错。测试场景中使用的数据有点复杂。所以术语abc
在索引中多次出现。但我只从索引中获得了10个最高分的文档。由于查询在abc
之前与d?f
匹配,得分最高,因此这些结果是第一位的。因此,查询找不到包含def
的文档。