C# 未找到Lucene.net转义字符,但找到了未转义字符-我应该何时转义?

C# 未找到Lucene.net转义字符,但找到了未转义字符-我应该何时转义?,c#,lucene.net,C#,Lucene.net,我有一个Lucene.net索引,其中一个字段接收许多包含括号的条目。在对该字段进行搜索之前,我通过QueryParser.Escape(searchTerm)运行搜索词。如果搜索包含括号的条目,则找不到它。但是在运行VisualStudio调试器时,我取消了对搜索字符串的转义,搜索成功地找到了我的条目 在索引“我的数据”时,我使用的是标准分析器。对于这个字段,我存储它,但不分析它 字段索引: 在构造Term或TermQuery对象时,是否有比反复试验更好的方法来知道是否(甚至哪些)特殊字符应该

我有一个Lucene.net索引,其中一个字段接收许多包含括号的条目。在对该字段进行搜索之前,我通过
QueryParser.Escape(searchTerm)
运行搜索词。如果搜索包含括号的条目,则找不到它。但是在运行VisualStudio调试器时,我取消了对搜索字符串的转义,搜索成功地找到了我的条目

在索引“我的数据”时,我使用的是标准分析器。对于这个字段,我存储它,但不分析它

字段索引: 在构造
Term
TermQuery
对象时,是否有比反复试验更好的方法来知道是否(甚至哪些)特殊字符应该转义

编辑 现场搜索: 这项工作:

List<Query> queryParts = new List<Query>;
queryParts.Add(new TermQuery(new Term("fieldName", searchValue)));
List queryParts=新列表;
添加(新术语查询(新术语(“字段名”,searchValue));
我第一次尝试,但没有成功:

List<Query> queryParts = new List<Query>;
queryParts.Add(new TermQuery(new Term("fieldName", QueryParser.Escape(searchValue))));
List queryParts=新列表;
Add(新术语查询(新术语(“fieldName”,QueryParser.Escape(searchValue)));
searchValue
来自用户输入。索引值和搜索值都应该包含括号和可能对Lucene有特殊意义的其他字符


queryParts
收集多个搜索条件,并最终组合成一个
BooleanQuery
,根据用户的选择,所有元素都可以与
BooleanClause.occure.MUST
BooleanClause.occure.SHOULD
组合;之后,该查询可能会与其他搜索条件结合使用。

如果不使用输入调用QueryParser.Parse(字符串),则无需使用QueryParser.Escape()

当您这样做时,转义方法会将转义字符添加到您的输入中,但由于您手动构建术语,转义字符将保留在那里,lucene会尝试搜索它们

索引值和搜索值都应该包含括号和可能对Lucene有特殊意义的其他字符


这些字符对QueryParser解析方法有特殊意义,它们在其他地方没有特殊意义。

您能提供一些搜索代码(QueryParser创建、搜索代码)吗?您说“取消转义到我的搜索字符串”的确切含义是什么?@JfBeaulac我猜他的意思是,他是在注释对QueryParser.Escape(searchTerm)的调用,但得到一些澄清和一些示例代码是很好的。在尝试转义搜索字符串@JfBeaulac之前,请查看索引。在撤消转义操作时,我右键单击Visual Studio中的监视项(在调试时)并选择了“编辑“。然后我手动删除了括号前的反斜杠。保存对查询的深入嵌入的Term对象的文本属性的更改并继续执行后,搜索成功了。因此,如果使用解析方法,我只需要转义输入?我需要用通配符查询进行转义吗?var wildQuery=新的通配符查询(新术语(字段,搜索值));是的,转义方法将转义解析方法用于从输入字符串构造查询的字符。因为您是手动创建查询的,所以不需要此方法。
List<Query> queryParts = new List<Query>;
queryParts.Add(new TermQuery(new Term("fieldName", QueryParser.Escape(searchValue))));