Lucene.net 找不到转义字符,但找不到未转义字符 - 我什么时候应该转义

本文关键字:找不到 转义字符 什么时候 转义 net Lucene | 更新日期: 2023-09-27 18:31:23

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

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

字段索引:

doc.Add(new Field("fieldName", fieldValue, Field.Store.YES, Field.Index.NOT_ANALYZED));

有没有比反复试验更好的方法来知道在构造TermTermQuery对象时是否应该(甚至哪些)特殊字符?

编辑

在字段上搜索:

这有效:

List<Query> queryParts = new List<Query>;
queryParts.Add(new TermQuery(new Term("fieldName", searchValue)));

我第一次尝试过但没有奏效:

List<Query> queryParts = new List<Query>;
queryParts.Add(new TermQuery(new Term("fieldName", QueryParser.Escape(searchValue))));

searchValue来自用户输入。 索引值和搜索值都应包含括号和可能对 Lucene 具有特殊意义的其他字符。

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

Lucene.net 找不到转义字符,但找不到未转义字符 - 我什么时候应该转义

如果您不使用输入来调用 QueryParser.Parse(string),则无需使用 QueryParser.Escape()。

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

索引值和

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

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