假设我有一个简单的Lucene索引。它只有一个文件,带有一个字段,比如“文本”,带有一个值,比如“maschio”。我想要的只是创建一个匹配此字段的查询,如SQL中的结束%。 以下查询适用于我:
text:m*
text:ma*
text:maschi*
但查询:
text:maschio*
与该字段的文档不匹配。还有另一种方法来执行这种搜索,可能使用精确类型的查询?我需要以前的所有查询来匹配项目。
答案 0 :(得分:0)
可能这是一个分析问题。使用EnglishAnalyzer
或ItalianAnalyzer
,您的查询就可以正常运行。你的个人资料说你来自意大利,所以我会说,也许你正在使用StandardAnalyzer
吗?
StandardAnalyzer
与任何特定语言分析器之间的主要区别在于。基本上,这意味着它试图将每个单词缩减为一个共同的词干,这个单词的许多不同形式或结合都可以减少到。
例如,在英语中,"播放","播放"和"玩"都被编入索引" plai",所以无论何时你搜索其中任何一个,你都会得到所有三个点击。
但是,当您引入通配符时,将跳过分析。
看起来索引中的词干是" maschi",所以到那时为止的术语工作得很好,但是由于词干已删除了最后一个字母,所以你不要得到一个匹配。如果你的查询没有通配符,它将被正常分析,问题就会消失。
如果您不希望在索引中出现词干,则可以切换到{{1}}。它的设计是多语言的,而且大多数情况下你只会失去词干。