我有一个包含值abc
和def
分析器默认字段的索引,属于两个不同的文档。当我执行查询时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
. 但是为什么重写查询时要替换通配符呢?