有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将原始输入字符串保留为CustomAnalyzer中的标记/术语

我正在使用ApacheLucene 6.3.0,我正在尝试为我的索引实现一个自定义分析器,它允许搜索文件名。问题是,我想允许用户也使用确切的文件名进行搜索,但Analyzer只有单独的标记,而不是作为标记之一的原始文件名

Analyzer analyzer = CustomAnalyzer.builder()
           .withTokenizer(StandardTokenizerFactory.class)
           .addTokenFilter(LowerCaseFilterFactory.class)
           .addTokenFilter(WordDelimiterFilterFactory.class)
           .build();  

输入:-power_shot_black_neo。txt

预期输出:-
强力射击,黑色射击。txt
功率
镜头
黑色
尼奥
txt

实际输出:-
功率
镜头
黑色
尼奥
txt


共 (1) 个答案

  1. # 1 楼答案

    因为您使用的是标准标记器,所以它会按照指示标记字符串。您可以使用关键字标记器和WordDelimiterFilter,因为WordDelimiterFilter也应该能够保留原始标记

    new WordDelimiterFilter(tokenizer, 
        GENERATE_WORD_PARTS |
        GENERATE_NUMBER_PARTS |
        SPLIT_ON_CASE_CHANGE |
        SPLIT_ON_NUMERICS |
        STEM_ENGLISH_POSSESSIVE |
        PRESERVE_ORIGINAL, /* this preserves the original token as well */
        ...
    );
    

    另一个选项是为精确值设置不同的字段,以便您也可以对字段进行不同的评分/加权