You've got to change the fields to do it.

If you use a String field, then only exact matches will match, but they'll be REALLY exact matches -- spacing, punctuation, etc.

Also, if you are using the lucene or dismax query parsers, you'll need to phrase quote your query if it has any spaces in it, to avoid query parser pre-tokenization. (I call it 'pre-tokenization', not sure what Solr calls it).

So you could use a textfield with the keyword tokenizer (does not split on word boundaries), and apply some punctuation/spacing normalization, to make your match a little bit less 'exact' if desired. You'd still need to issue your query as phrase quoted if it contains any spaces, to the lucene or dismax query parsers. Or use a different query parser, like "field" or "raw" or that new one I can't remember the name of.

Another idea I've had for exact matching, but haven't tried out myself yet: Use a text/analyzed field, WITH tokenization, but manually add a token such as "THE_START" to the start of the field before indexing, and "THE_END" to the end of the field before indexing. Then when you do a query, phrase quote it AND manually add those tokens before issuing the query. So if the user entered "quick brown fix", you'd actually send a search for (phrase quoted) "THE_START quick brown fox THE_END". That would hypothetically be another way of getting an 'exact' match (with whatever normalization the field's analysis does), in a field that could also be used for 'ordinary' searching. Haven't tried it myself yet. Those extra tokens might (or might not) alter Solr's relevancy scores somewhat.

Jonathan

On 5/17/2011 9:51 AM, Alex Grilo wrote:
Hi,

Can I make a query that returns only exact match or do I have to change the
fields to achieve that?

Thanks in advance

Alex Grilo

Reply via email to