lucene - 在 Lucene 搜索中将 + 作为特殊字符处理

标签 lucene lucene.net

当我的输入字符串包含 c++ 之类的术语时,如何确保 lucene 返回相关搜索结果?
Lucene 似乎忽略++ 字符。

代码详情:
当我执行这一行时,我得到一个空白的搜索查询。

queryField = multiFieldQueryParser.Parse(inpKeywords);

keywordsQuery.Add(queryField, BooleanClause.Occur.SHOULD);

这是我的自定义分析器:
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;
        }
}

我正在以这种方式执行搜索查询:
indexSearcher.Search(searchQuery, collector);

我确实尝试过 queryField = multiFieldQueryParser.Parse(QueryParser.Escape(inpKeywords));,但它仍然不起作用。这是执行并返回零命中的查询。 "+(())"

谢谢。

最佳答案

从,+是特殊字符,需要转义。需要转义的所有字符的列表是 here (见页面底部。)

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

关于lucene - 在 Lucene 搜索中将 + 作为特殊字符处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598465/

相关文章:

c# - 将数据库添加到 visual studio 中的项目

lucene.net - TermQuery 不会返回已知的搜索词,但 WildcardQuery 会返回

lucene - 更新lucene指数

elasticsearch - Elasticsearch是实时更新的API吗?

search - 根据用户点击对 solr 结果进行排序?

c# - 将查询部分与 Lucene 和数据库 (MySQL) 中的部分相结合

c# - Lucene:对同一文档多次调用 UpdateDocument 会导致分数不断增加

java - Solr 中的 DoubleMetaphoneFilterFactory

java - CompassQuery - 仅保留关键字,不保留别名或运算符