Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么lucene单字符通配符查询找到的文档比完全指定通配符时少?_Java_Lucene - Fatal编程技术网

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

Java 为什么lucene单字符通配符查询找到的文档比完全指定通配符时少?,java,lucene,Java,Lucene,我有一个索引,其中包含analyzers默认字段中的值abc和def,属于两个不同的文档。当我执行查询abc或def时,我会得到索引中两个文档的命中率。但是当我使用abc或d?f时,我只对包含abc的文档进行了点击。当我用d?f查询索引时,我得到了包含def的文档的命中率 当我查看abc或d?f的解析查询时,我看到了正确的结果。这意味着解析的BooleanQuery将WildcardQuery作为第二个子句 我做错什么了吗 在我的应用程序中,在上面指定的一个之上还有另一个布尔子句。这与上面指定的

我有一个索引,其中包含analyzers默认字段中的值
abc
def
,属于两个不同的文档。当我执行查询
abc或def
时,我会得到索引中两个文档的命中率。但是当我使用
abc或d?f
时,我只对包含
abc
的文档进行了点击。当我用
d?f
查询索引时,我得到了包含
def
的文档的命中率

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

我做错什么了吗

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

我正在使用lucene 3.0.3

编辑:

我看了一下索引使用。在那里,我看到在重写的查询中,术语
d?f
()
替换。知道查询显然只匹配
abc
。但是为什么在重写查询时替换了通配符?

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

我必须承认我对Lucene不熟悉,但粗略看一下文档似乎可以确认您的使用应该是正确的。我最初的想法是,有什么东西导致您的第二个查询被解释为正则表达式,因为这会导致它找不到
def
,但正如我所说的,我对Lucene的了解还不够。这只是一个我认为可能对你有用的想法。从你的描述来看,这一切看起来都是正确的。我想解决这个问题的唯一方法是将您的用例提取到一个单独的独立的可运行类中,该类演示了这个问题。@maxbeaudoin我目前正在开发一个sscce。@SpaceTrucker该死的,我不得不用谷歌搜索这个问题,哈哈!