c# - 执行 Lucene 搜索查询 "Contains"

标签 c# lucene lucene.net

我正在搜索包含用户输入文本的文档

如果 searchText 中没有任何特殊字符,它工作正常。

下面是我如何创建我的 QueryParser。 :

//analyzer is an StandardAnalyzer()
  QueryParser parser = new QueryParser("Text", analyzer);
            parser.SetAllowLeadingWildcard(true);
            return parser.Parse(string.Format("*{0}*", searchText));

如果搜索文本中包含任何特殊字符,我会收到以下错误:

假设搜索文本是“bed [”

Cannot parse '*bed [*': Encountered "<EOF>" at line 1, column 7.

如果搜索文本中有任何特殊字符,我怎样才能让我的查询解析器不失败,而且我不想忽略这些特殊字符。

最佳答案

尝试使用:

QueryParser parser = new QueryParser("Text", analyzer);
parser.SetAllowLeadingWildcard(true);
var escapedSearchText = QueryParser.Escape(searchText);
return parser.Parse(string.Format("*{0}*", escapedSearchText));

即在构建查询之前转义搜索文本。

希望对您有所帮助,

关于c# - 执行 Lucene 搜索查询 "Contains",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6663737/

相关文章:

c# - 如何为数据网格的 NewItemPlaceholder 行添加模板?

c# - 是否可以从 Visual C# 2005 到 Visual C# 2008 Express 进行命令行项目升级和编译?

solr - 在lucene BooleanQuery中将整个句子与空格匹配

full-text-search - 如何在 LuceneNet 中使用 indexWriter 删除文档

c# - Lucene.net:查询和使用过滤器来限制结果

javascript - 在 .Net ApiController 中启动文件下载

c# - 使用 Roslyn 替换方法节点

c# - Lucene.Net - 如何将空格分隔的短语视为单个标记?

solr - Solr/Lucene 中的字段长度是如何定义的?

lucene.net - 使用 lucene.net 搜索时如何启用词干提取?