查询行为在Lucene 5中

时间:2015-07-03 17:37:26

标签: lucene

假设我有一个简单的Lucene索引。它只有一个文件,带有一个字段,比如“文本”,带有一个值,比如“maschio”。我想要的只是创建一个匹配此字段的查询,如SQL中的结束%。 以下查询适用于我:

text:m*
text:ma*
text:maschi*

但查询:

text:maschio*

与该字段的文档不匹配。还有另一种方法来执行这种搜索,可能使用精确类型的查询?我需要以前的所有查询来匹配项目。

1 个答案:

答案 0 :(得分:0)

可能这是一个分析问题。使用EnglishAnalyzerItalianAnalyzer,您的查询就可以正常运行。你的个人资料说你来自意大利,所以我会说,也许你正在使用StandardAnalyzer吗?

StandardAnalyzer与任何特定语言分析器之间的主要区别在于。基本上,这意味着它试图将每个单词缩减为一个共同的词干,这个单词的许多不同形式或结合都可以减少到。

例如,在英语中,"播放","播放"和"玩"都被编入索引" plai",所以无论何时你搜索其中任何一个,你都会得到所有三个点击。

但是,当您引入通配符时,将跳过分析。

看起来索引中的词干是" maschi",所以到那时为止的术语工作得很好,但是由于词干已删除了最后一个字母,所以你不要得到一个匹配。如果你的查询没有通配符,它​​将被正常分析,问题就会消失。

如果您不希望在索引中出现词干,则可以切换到{{1}}。它的设计是多语言的,而且大多数情况下你只会失去词干。