为什么lucene单字符通配符查询比完全指定通配符时查找更少的文档?

时间:2012-11-21 14:19:02

标签: java lucene

我的索引在分析器默认字段中包含值abcdef,并且属于两个不同的文档。当我执行查询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。但是为什么在重写查询时会替换通配符?

1 个答案:

答案 0 :(得分:0)

这只是我的错。测试场景中使用的数据有点复杂。所以术语abc在索引中多次出现。但我只从索引中获得了10个最高分的文档。由于查询在abc之前与d?f匹配,得分最高,因此这些结果是第一位的。因此,查询找不到包含def的文档。