There is a hacky kind of thing that Bill Dueber figured out for using multiple fields and dismax to BOOST "exact" matches, but include all matches in the result set.

You have to duplicate your data in a second non-tokenized field. Then you use dismax pf to super boost matches on the non-tokenized field. Because 'pf' is a phrase search, you don't run into trouble with dismax "pre-tokenization" on white space, even though it's a field that might have internal-token whitespace. (Using a non-tokenized field with dismax qf will basically never match a result with whitespace, unless it's phrase-quoted in query. But pf works.).

Because it was a non-tokenized field, it only matches (and triggers the dismax ps super boost) if it's an exact match. And it works. You CAN normalize your 'exact match' field in field analysis, removing punctuation or normalizing whitespace or whatever, and that works too, doing it both at index and query time analysis.



On 1/4/2011 4:28 PM, Chris Hostetter wrote:
: I am trying to make sure that when I search for text—regardless of
: what that text is—that I get an exact match.  I'm *still* getting some
: issues, and this last mile is becoming very painful.  The solr field,
: for which I'm setting this up on, is pasted below my explanation.  I
: appreciate any help.

if you are using a TextField with some analysis components, it's
virtually impossible to get "exact" matches -- where my definition of
exact is that the query text is character for character identical to the
entire field value indexed.

is your definition of exact match different?  i assme it must be since you
are using TextField and talk about wanting to deal with whitespace between
words.  so i think you need to explain a little bit better what your
indexed data looks like, and what sample queries you expect to match that
data (and equally important: what queries should *not* match thta data,
and what data should *not* match those queries)

: If I want to find *all* Solr documents that match
: "[id]somejunk\hi[/id]" then life is instantly hell.

90% of the time when people have problems with "exact" matches it's
because of QueryParser meta characters -- characters like ":", "[" and
whitespace that the QUeryParser uses as instructions.  you can use the
"raw" QParser to have every character treated as a literal....

        defType=raw
        q=[id]somejunk\hi[/id]

-Hoss

Reply via email to