我有一个 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
;之后,该查询可能会与其他搜索条件相结合。