I am using the edismax query parser -- its awesome!  works well for
standard dismax type queries, and allows explicit fields when
necessary.

I have hit a snag when people enter something that looks like a windows path:
<lst name="params">
 <str name="q">F:\path\to\a\file</str>
</lst>
this gets parsed as:
<str name="rawquerystring">F:\path\to\a\file</str>
<str name="querystring">F:\path\to\a\file</str>
<str name="parsedquery">+()</str>

Putting it in quotes makes the not-quite right query:
<str name="rawquerystring">"F:\path\to\a\file"</str>
<str name="querystring">"F:\path\to\a\file"</str>
<str name="parsedquery">
+DisjunctionMaxQuery((path:f:pathtoafile^4.0 | name:"f (pathtoafile
fpathtoafile)"^7.0)~0.01)
</str>
<str name="parsedquery_toString">
+(path_path:f:pathtoafile^4.0 | name:"f (pathtoafile fpathtoafile)"^7.0)~0.01
</str>

Telling people to escape the query:
q=F\:\\path\\to\\a\\file
is unrealistic, but gives the proper parsed query:

+DisjunctionMaxQuery((path_path:f:/path/to/a/file^4.0 | name:"f path
to a (file fpathtoafile)"^7.0)~0.01)

Any ideas on how to support this?  I could try looking for things like
paths in the app, and then modify the query, or maybe look at
extending edismax.  Perhaps when F: does not match a given field, it
could auto escape the rest of the word?

thanks
ryan

Reply via email to