Java Lucene搜索:区分大小写,区分重音
我是Lucene的新手,但我想搜索某个领域,但有不同的选择。 假设我有以下几句话:Java Lucene搜索:区分大小写,区分重音,java,search,lucene,hibernate-search,Java,Search,Lucene,Hibernate Search,我是Lucene的新手,但我想搜索某个领域,但有不同的选择。 假设我有以下几句话: 试验 试验 试验 试验 泰斯特 泰斯特 我希望能够搜索搜索值“test”,并且我希望搜索区分大小写并区分重音。给我结果4 但我也希望能够搜索搜索值“test”,我希望搜索不区分大小写,不区分重音。给我结果1-6 此外,还可以进行不区分大小写和区分重音的搜索。 就像其他组合一样 处理这个问题的最佳方法是什么 我已尝试注释我的字段: @Fields({ @Field(analyze = Analyze.Y
@Fields({
@Field(analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(impl = WhitespaceAnalyzer.class)),
@Field(name = "DiacriticUnaware", analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "diacritics"))
})
private String fieldToSearchIn;
使用此AnalyzerDef时:
@AnalyzerDefs({
@AnalyzerDef(name = "diacritics",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class)
})
})
但这只允许我搜索区分大小写或区分大小写并使用变音符号。
我可以为该属性创建多个索引字段,但我不知道这是否是正确的方法,因为我最终将为该属性编制索引并将其存储到Lucene中的10个或更多不同索引字段中
像这样:
@Fields({
@Field(analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(impl = WhitespaceAnalyzer.class)),
@Field(name = "DiacriticUnaware", analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "diacritics")),
@Field(name = "DiacriticUnawareCaseSenstitive", analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "diacriticsCaseSensitive")),
@Field(name = "DiacriticUnawareCaseInsenstitive", analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "diacriticsCaseInsensitive")),
@Field(name = "DiacriticAwareCaseSenstitive", analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "diacriticAwareCaseSenstitive")),
@Field(name = "DiacriticAwareCaseInsenstitive", analyze = Analyze.YES, store = Store.YES, analyzer = @Analyzer(definition = "diacriticAwareCaseInsenstitive")),
...
})
10个或更多?看起来我正好需要4个。你能解释一下你的意思吗?目前我只有2个选项:变音符号,大小写,但选项会增加,我最终会有4或5个选项,应该合并。我认为正确的选项是处理多个字段,并针对正确的字段在查询时间内,这取决于用例。所以我展示的方法是正确的吗?我希望有一个更干净的方法来做到这一点。谢谢10个或更多?看起来我正好需要4个。你能解释一下你的意思吗?目前我只有2个选项:变音符号,大小写,但选项会增加,我最终会有4或5个选项,应该合并。我认为正确的选项是处理多个字段,并针对正确的字段在查询时间内,这取决于用例。所以我展示的方法是正确的吗?我希望有一个更干净的方法来做到这一点。谢谢