使用Lucene.NET转义通配符搜索中的特殊字符

hof*_*mar 5 lucene search lucene.net escaping wildcard

在Lucene.NET 3.0.3.0的通配符搜索中,我已经找了很长时间来转义#,{,, [,]等特殊字符,但我找不到任何可能的解决方案.

我使用StandardAnalyzer索引我的文档.字段"title"具有attributs Field.Store.YES和Field.Index.ANALYZED.
在搜索时,我为我的searchterm调用了MultiFieldQueryParser.Escape.转义的查询看起来正确,但解析该术语会删除转义字符.所以我的搜索找不到任何结果.

searchterm:Klammer[affe]
转义searchterm:*Klammer\\[affe\\]*
解析后:title:*Klammer[affe]*

那么,如何在wildcard-Search中转义特殊字符?

小智 15

您也可以使用Lucene实现QueryParser.Escape(searchQuery).


Dre*_*ker 6

来自lucene文档

逃避特殊角色

Lucene支持转义作为查询语法一部分的特殊字符.当前列表中的特殊字符是

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
Run Code Online (Sandbox Code Playgroud)

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

\(1\+1\)\:2

所以你的查询应该是 *Klammer\[affe\]*

但标准分析器会删除这些字符,因此您需要以不同方式索引原始内容.

请参阅此相关问题解答/sf/answers/1233968921/.关于更改分析方法的一些信息的另一个问题如何使用QueryParser执行包含特殊字符的lucene查询?