3

我有一个包含值abcdef分析器默认字段的索引,属于两个不同的文档。当我执行查询时abc OR def,我得到了索引中两个文档的命中。但是当我使用时,abc OR d?f我只会对包含abc. 当我查询索引时,d?f我得到了包含def.

当我查看解析后的查询时,abc OR d?f我看到了正确的结果。这意味着将 aBooleanQuery解析WildcardQuery为第二个子句。

难道我做错了什么?

在我的应用程序中,我在上面指定的上面还有另一个布尔子句。这匹配与上面指定的字段不同的字段。所以在我的情况下,一个完整的查询是:user:john AND (abc OR d?f). 但是我索引中的所有文档都包含john在该user字段中。所以这不应该是问题。

我正在使用 lucene 3.0.3。

编辑:
我使用luke查看了索引。在那里,我看到在重写的查询中,该术语d?f被替换为(). 知道很明显查询只会匹配abc. 但是为什么重写查询时要替换通配符呢?

4

1 回答 1

0

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

于 2012-11-22T07:14:49.677 回答