处理+作为Lucene搜索中的特殊字符

Ed.*_*Ed. 7 lucene lucene.net

当我的输入字符串包含像c ++这样的术语时,我如何确保lucene能够返回相关的搜索结果?Lucene似乎忽略了++字符.

代码详细信息:当我执行此行时,我得到一个空白的搜索查询.

queryField = multiFieldQueryParser.Parse(inpKeywords);

keywordsQuery.Add(queryField, BooleanClause.Occur.SHOULD);
Run Code Online (Sandbox Code Playgroud)

这是我的自定义分析器:

public class CustomAnalyzer : Analyzer
    {
        private static readonly WhitespaceAnalyzer whitespaceAnalyzer = new WhitespaceAnalyzer();
    public override TokenStream TokenStream(String fieldName, System.IO.TextReader reader)
        {
            TokenStream result = whitespaceAnalyzer.TokenStream(fieldName, reader);
            result = new StandardTokenizer(reader);
            result = new LowerCaseFilter(result);
            result = new StopFilter(result, stop_words);
            return result;
        }
}
Run Code Online (Sandbox Code Playgroud)

我正在以这种方式执行搜索查询:

indexSearcher.Search(searchQuery, collector);
Run Code Online (Sandbox Code Playgroud)

我确实尝试过queryField = multiFieldQueryParser.Parse(QueryParser.Escape(inpKeywords));,但它仍然无效.这是执行的查询并返回零点击."+(())"

谢谢.

Sha*_*ore 4

由于+是一个特殊字符,因此需要对其进行转义。需要转义的所有字符的列表位于此处(请参见页面底部。)

您还需要注意索引时使用的分析器。例如,StandardAnalyzer 将跳过+. 在索引和搜索时,您可能需要使用 WhiteSpaceAnalyzer 之类的工具,这将保留令牌流中的特殊字符。请记住,您在索引和搜索时需要使用相同的分析器。