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

时间:2013-11-19 15:45:23

标签: search lucene escaping wildcard lucene.net

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

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

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

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

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:6)

来自lucene documentation

  

转义特殊字符

     

Lucene支持转义属于查询的特殊字符   句法。当前列表的特殊字符是

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
     

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

     

\(1\+1\)\:2

因此,您的查询应为*Klammer\[affe\]*

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

请参阅此相关问题的答案https://stackoverflow.com/a/17628127/956658。关于更改分析方法的一些信息的另一个问题How to perform a lucene query containing special character using QueryParser?