Reputation:
I have looked for a long time for escaping special characters like #, {, , [, ], ... while in wildcard search in Lucene.NET 3.0.3.0, but I can´t find any possible solutions.
I have index my documents using StandardAnalyzer. The field "title" has the attributs Field.Store.YES and Field.Index.ANALYZED.
While searching I called MultiFieldQueryParser.Escape for my searchterm. The escaped query looks right but parsing the term remove the escaping characters. So my search can not find any results.
searchterm: Klammer[affe]
escaped searchterm: *Klammer\\[affe\\]*
after parsing: title:*Klammer[affe]*
So, how can I escape special characters in wildcard-Search?
Upvotes: 8
Views: 12910
Reputation: 3035
From the lucene documentation
Escaping Special Characters
Lucene supports escaping special characters that are part of the query syntax. The current list special characters are
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
To escape these character use the \ before the character. For example to search for (1+1):2 use the query:
\(1\+1\)\:2
So your query should be *Klammer\[affe\]*
But the standard analyzer deletes those characters so you need to index the original content differently.
See this related questions answer https://stackoverflow.com/a/17628127/956658. Another question with some info on changing the analyzing method How to perform a lucene query containing special character using QueryParser?
Upvotes: 7
Reputation: 321
You could also use the Lucene implementation QueryParser.Escape(searchQuery)
.
Upvotes: 20