Java Lucene搜索:区分大小写,区分重音

Java Lucene搜索:区分大小写,区分重音,java,search,lucene,hibernate-search,Java,Search,Lucene,Hibernate Search,我是Lucene的新手,但我想搜索某个领域,但有不同的选择。 假设我有以下几句话: 试验 试验 试验 试验 泰斯特 泰斯特 我希望能够搜索搜索值“test”,并且我希望搜索区分大小写并区分重音。给我结果4 但我也希望能够搜索搜索值“test”,我希望搜索不区分大小写,不区分重音。给我结果1-6 此外,还可以进行不区分大小写和区分重音的搜索。 就像其他组合一样 处理这个问题的最佳方法是什么 我已尝试注释我的字段: @Fields({ @Field(analyze = Analyze.Y

我是Lucene的新手,但我想搜索某个领域,但有不同的选择。 假设我有以下几句话:

  • 试验
  • 试验
  • 试验
  • 试验
  • 泰斯特
  • 泰斯特
  • 我希望能够搜索搜索值“test”,并且我希望搜索区分大小写并区分重音。给我结果4

    但我也希望能够搜索搜索值“test”,我希望搜索不区分大小写,不区分重音。给我结果1-6

    此外,还可以进行不区分大小写和区分重音的搜索。 就像其他组合一样

    处理这个问题的最佳方法是什么

    我已尝试注释我的字段:

    @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个选项,应该合并。我认为正确的选项是处理多个字段,并针对正确的字段在查询时间内,这取决于用例。所以我展示的方法是正确的吗?我希望有一个更干净的方法来做到这一点。谢谢