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));
有没有比反复试验更好的方法来知道在构造Term
或TermQuery
对象时是否应该(甚至哪些)特殊字符?
编辑
在字段上搜索:
这有效:
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.MUST
或BooleanClause.Occur.SHOULD
组合;之后,该查询可以与其他搜索条件组合。
如果您不使用输入来调用 QueryParser.Parse(string),则无需使用 QueryParser.Escape()。
当您这样做时发生的情况是,Escape 方法会将转义字符添加到您的输入中,但由于您手动构建了术语,转义字符将保留在那里,Lucene 会尝试搜索它们。
索引值和搜索值都应包含括号和可能对 Lucene 具有特殊意义的其他字符
这些字符对 QueryParser Parse 方法具有特殊意义,它们在其他地方没有特殊意义。