执行Lucene搜索查询“包含”

时间:2011-07-12 11:52:41

标签: 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.

如果搜索文本中有任何特殊字符,并且我不想忽略特殊字符,如何使我的查询解析器不会失败。

2 个答案:

答案 0 :(得分:6)

尝试使用:

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

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

希望这有帮助,

答案 1 :(得分:0)

Lucene支持转义属于查询语法的特殊字符。当前列表的特殊字符是

    • &安培;&安培; || ! (){} [] ^“〜*?:\

要逃避这些角色,请在角色前使用\。例如,要搜索(1 + 1):2,请使用查询:

(1 + 1)\:2