Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Lucene 词干+;通配符:意外效果_Lucene_Lucene.net_Wildcard_Stemming - Fatal编程技术网

Lucene 词干+;通配符:意外效果

Lucene 词干+;通配符:意外效果,lucene,lucene.net,wildcard,stemming,Lucene,Lucene.net,Wildcard,Stemming,我正在编辑一个lucene.net实现(2.3.2),其中包括词干分析和自动通配符(在单词末尾添加*) 我发现带有通配符的精确单词不起作用。(因此stack*适用于stackoverflow,但stackoverflow*不受欢迎),我想知道这是什么原因,以及如何修复 提前谢谢。(也感谢您没有问我为什么要同时实现自动通配符和词干分析。) 我将使查询始终以query为前缀,这样我就不必在查询中添加任何讨厌的“*”了,这样我们就可以看到是否有任何东西变得清晰了 编辑:只有有词干的单词不能使用通配符。

我正在编辑一个lucene.net实现(2.3.2),其中包括词干分析和自动通配符(在单词末尾添加*)

我发现带有通配符的精确单词不起作用。(因此stack*适用于stackoverflow,但stackoverflow*不受欢迎),我想知道这是什么原因,以及如何修复

提前谢谢。(也感谢您没有问我为什么要同时实现自动通配符和词干分析。)

我将使查询始终以query为前缀,这样我就不必在查询中添加任何讨厌的“*”了,这样我们就可以看到是否有任何东西变得清晰了


编辑:只有有词干的单词不能使用通配符。示例silican*不起作用,但silic*起作用。

它不起作用的原因是因为你屏蔽了内容,从而改变了术语

例如,考虑“阀门”这个词。雪球分析仪将把它压缩到“阀门”

因此,在搜索时,由于您阻止了输入查询,“valve”和“valves”都将被阻止为“valv”。使用带词干的
术语
查询
“valv”将在出现“valve”和“valves”时产生匹配

但是现在,由于您在索引中存储了
术语
“valv”,因此对“valve*”的查询将不匹配任何内容。这是因为
QueryParser
不会对通配符查询运行
Analyzer

有些情况下是无法处理的,但我认为Lucene的2.3.x版本中没有。无论如何,它不是一个通用的适合,文件说:

警告:此类应仅与不使用停止字或添加标记的分析器一起使用。此外,还有一些词干分析器是不合适的:例如,GermanAnalyzer会将Häuser转换为hau,但在使用此解析器时,H?user会变成H?user,因此找不到匹配项(即,在这种情况下,使用此解析器不会比QueryParser有任何改进)


我链接的复制中提到的解决方案适用于所有情况,但您将获得更大的索引。

您的analyzer标记器“stackoverflow”是如何实现的?复制:肯定是重复的(抱歉),但不是精确的。我不明白这为什么不起作用。我想这是因为通配符短语的分析方式与索引不同,但更具体的答案可能会对我有所帮助。@jpountz抱歉,刚刚意识到这种情况只发生在词干的单词上。所以“硅酸盐*”不起作用,但“stackoverflow*”起作用。