Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在CustomAnalyzer中将原始输入字符串保留为标记/术语_Java_Apache_Solr_Lucene - Fatal编程技术网

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

Java 在CustomAnalyzer中将原始输入字符串保留为标记/术语,java,apache,solr,lucene,Java,Apache,Solr,Lucene,我正在使用ApacheLucene6.3.0,我正在尝试为我的索引实现一个自定义分析器,它允许搜索文件名。问题是我想允许用户也使用确切的文件名进行搜索,但是分析器只有单独的标记,而不是作为标记之一的原始文件名 Analyzer analyzer = CustomAnalyzer.builder() .withTokenizer(StandardTokenizerFactory.class) .addTokenFilter(LowerCaseFilter

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

Analyzer analyzer = CustomAnalyzer.builder()
           .withTokenizer(StandardTokenizerFactory.class)
           .addTokenFilter(LowerCaseFilterFactory.class)
           .addTokenFilter(WordDelimiterFilterFactory.class)
           .build();  
输入:-power\u shot\u black\u neo.txt

预期输出:-
power\u shot\u black\u neo.txt
功率
镜头
黑色
尼奥
文本

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

TXT

< P>在“记录器”之前,需要使用“字符过滤器”JUSTER来获得完整的字符串,因为令牌只考虑令牌和字符过滤器->字符过滤器用于在标记之前对字符串进行“整理”。

有关更多详细信息,请参考以下url:


< p>在“记录器”之前,需要使用“字符过滤器”JUSTER来获得完整的字符串,因为令牌只考虑令牌和字符过滤器->字符过滤器用于在被标记之前“整理”字符串。

有关更多详细信息,请参考以下url:


因为您使用的是标准标记器,它将按照指示标记字符串。您可以使用关键字标记器和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 */
    ...
);

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

因为您使用的是标准标记器,它将按照指示标记字符串。您可以使用关键字标记器和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 */
    ...
);

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

我使用了HTMLCharFilter,但没有多大帮助,我无法在分析器中保留原始输入字符串我使用了HTMLCharFilter,但没有多大帮助,我无法在Analyzer中保留原始输入字符串,但是如果在这些过滤器之后添加EdgeNGramFilter会怎么样?它还将为保留的原始文件名生成标记,该标记将与othersYup复制。您可以添加
RemoveDuplicatesTokenFilter
以删除相同位置的重复令牌。否则,您将不得不使用具有不同标记化/处理规则的多个字段。谢谢Mats,但是如果我在这些过滤器之后添加EdgeNGramFilter呢?它还将为保留的原始文件名生成标记,该标记将与othersYup复制。您可以添加
RemoveDuplicatesTokenFilter
以删除相同位置的重复令牌。否则,您将不得不使用具有不同标记化/处理规则的多个字段。