lucene5中的查询行为

lucene5中的查询行为,lucene,Lucene,假设我有一个简单的Lucene索引。它只有一个文档,有一个字段,如“text”,有一个值,如“maschio”。我只想创建一个与此字段匹配的查询,就像SQL中的结尾%一样。 以下查询适用于我: text:m* text:ma* text:maschi* 但问题是: text:maschio* 与该字段的文档不匹配。还有另一种执行这种搜索的方法,可能使用精确的查询类型?我需要前面的所有查询来匹配该项。这可能是一个分析问题。使用StandardAnalyzer或EnglishAnalyzer可以

假设我有一个简单的Lucene索引。它只有一个文档,有一个字段,如“text”,有一个值,如“maschio”。我只想创建一个与此字段匹配的查询,就像SQL中的结尾%一样。 以下查询适用于我:

text:m*
text:ma*
text:maschi*
但问题是:

text:maschio*

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

这可能是一个分析问题。使用
StandardAnalyzer
EnglishAnalyzer
可以很好地进行查询。你的个人资料显示你来自意大利,所以我会冒险说,也许你在使用
Italianalyzer

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

例如,在英语中,“play”、“plays”和“playing”都被索引为“plai”,因此,无论何时搜索其中任何一个,都会得到这三个词的点击率

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

看起来索引中的词干是“maschi”,所以在这一点之前的术语都可以正常工作,但是由于词干分析器删除了最后一个字母,因此没有找到匹配的词干。如果您的查询没有通配符,它将被正常分析,问题就会消失


如果不想在索引中添加词干,可以切换到
StandardAnalyzer
。它被设计成多语言的,而且大多数情况下你会失去词干分析器。

这可能是一个分析问题。使用
StandardAnalyzer
EnglishAnalyzer
可以很好地进行查询。你的个人资料显示你来自意大利,所以我会冒险说,也许你在使用
Italianalyzer

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

例如,在英语中,“play”、“plays”和“playing”都被索引为“plai”,因此,无论何时搜索其中任何一个,都会得到这三个词的点击率

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

看起来索引中的词干是“maschi”,所以在这一点之前的术语都可以正常工作,但是由于词干分析器删除了最后一个字母,因此没有找到匹配的词干。如果您的查询没有通配符,它将被正常分析,问题就会消失


如果不想在索引中添加词干,可以切换到
StandardAnalyzer
。它的设计是多语言的,大多数情况下,你会失去词干分析器。

是的,我是意大利人!我在一个虚拟项目上做了一些试验,得到了与我所要求的相同的结果,即使用Analyzer并将我的字段从TextField切换到StringField。另一个选择是在应用通配符查询之前使用analyzer来终止我的术语,但我找不到如何在Java中使用Lucene来完成它。然而,根据您的看法,其中哪一个(包括您的建议)似乎是最好的选择?
StringField
完全跳过标记化,这通常会导致更大的全文问题。尝试先阻止单词,然后应用通配符是可能的,但不会解决所有问题。在英语中,play变为plai,但player是未经修饰的,所以若你们玩了那个游戏*就不会和player匹配。词干分析器的设计并不能很好地处理通配符。我会使用
StandardAnalyzer
。你可以在两个不同的领域对同一内容使用不同的分析策略(“content”和“content_stemed”,或类似的内容)。是的,我是意大利人!我在一个虚拟项目上做了一些试验,得到了与我所要求的相同的结果,即使用Analyzer并将我的字段从TextField切换到StringField。另一个选择是在应用通配符查询之前使用analyzer来终止我的术语,但我找不到如何在Java中使用Lucene来完成它。然而,根据您的看法,其中哪一个(包括您的建议)似乎是最好的选择?
StringField
完全跳过标记化,这通常会导致更大的全文问题。尝试先阻止单词,然后应用通配符是可能的,但不会解决所有问题。在英语中,play变为plai,但player是未经修饰的,所以若你们玩了那个游戏*就不会和player匹配。词干分析器的设计并不能很好地处理通配符。我会使用
StandardAnalyzer
。您始终可以在两个不同的字段(“内容”和“内容”或类似字段)中对同一内容使用不同的分析策略。