You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by prashantc88 <pr...@searshc.com> on 2014/07/21 17:29:33 UTC

Solr schema.xml query analyser

 0 down vote favorite
	

I am a complete beginner to Solr and need some help.

My task is to provide a match when the search term contains the indexed
field.

For example:

    If query= foo bar and textExactMatch= foo, I should not get a MATCH
    If query= foo bar and textExactMatch= foo bar, I should get a MATCH
    If query= foo bar and textExactMatch= xyz foo bar/foo bar xyz, I should
get a MATCH

I am indexing my field as follows:

<fieldType name="textExactMatch" class="solr.TextField"
positionIncrementGap="100">
            <analyzer type="index">
                    <tokenizer class="solr.KeywordTokenizerFactory"/>
                    <filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt"/>
                    <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>

So I'm indexing the text for the field as it is without breaking it further
down. Could someone help me out with how should I tokenize and filter the
field during query time.




--
View this message in context: http://lucene.472066.n3.nabble.com/Solr-schema-xml-query-analyser-tp4148317.html
Sent from the Solr - User mailing list archive at Nabble.com.

Re: Solr schema.xml query analyser

Posted by Jack Krupansky <ja...@basetechnology.com>.
That sounds more like a "reverse" query - trying to match documents against 
the query rather than matching the query against the documents. Solr doesn't 
have that feature currently.

Although I'm not absolutely sure what your "textExactMatch" is. I'm guessing 
that it is a document field in your index.

-- Jack Krupansky

-----Original Message----- 
From: newBie88
Sent: Monday, July 21, 2014 1:13 PM
To: solr-user@lucene.apache.org
Subject: Re: Solr schema.xml query analyser

My apologies Jack. But there was a mistake in my question.

I actually switched "query" and "textExactMatch" in my question.

I would be really helpful if you could have a look at the scenario once
again:

My task is to provide a match when the search term contains the indexed
field.

For example:

    If textExactMatch= foo bar and query= foo, I should not get a MATCH
    If textExactMatch= foo bar and query= foo bar, I should get a MATCH
    If textExactMatch= foo bar and query= xyz foo bar/foo bar xyz, I should
get a MATCH

I am indexing my field as follows:

<fieldType name="textExactMatch" class="solr.TextField"
positionIncrementGap="100">
  <analyzer type="index">
     <tokenizer class="solr.KeywordTokenizerFactory"/>
     <filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt"/>
     <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

So I'm indexing the text for the field as it is without breaking it further
down. How should I tokenize and filter the field during query time?



--
View this message in context: 
http://lucene.472066.n3.nabble.com/Solr-schema-xml-query-analyser-tp4148317p4148352.html
Sent from the Solr - User mailing list archive at Nabble.com. 


Re: Solr schema.xml query analyser

Posted by newBie88 <pr...@searshc.com>.
My apologies Jack. But there was a mistake in my question.

I actually switched "query" and "textExactMatch" in my question.

I would be really helpful if you could have a look at the scenario once
again:

My task is to provide a match when the search term contains the indexed
field. 

For example: 

    If textExactMatch= foo bar and query= foo, I should not get a MATCH 
    If textExactMatch= foo bar and query= foo bar, I should get a MATCH 
    If textExactMatch= foo bar and query= xyz foo bar/foo bar xyz, I should
get a MATCH 

I am indexing my field as follows: 

<fieldType name="textExactMatch" class="solr.TextField"
positionIncrementGap="100">
  <analyzer type="index">
     <tokenizer class="solr.KeywordTokenizerFactory"/>
     <filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt"/>
     <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

So I'm indexing the text for the field as it is without breaking it further
down. How should I tokenize and filter the field during query time? 



--
View this message in context: http://lucene.472066.n3.nabble.com/Solr-schema-xml-query-analyser-tp4148317p4148352.html
Sent from the Solr - User mailing list archive at Nabble.com.

Re: Solr schema.xml query analyser

Posted by Jack Krupansky <ja...@basetechnology.com>.
Based on your stated requirements, there is no obvious need to use the 
keyword tokenizer. So fix that and then quoted phrases or escaped spaces 
should work.

-- Jack Krupansky

-----Original Message----- 
From: prashantc88
Sent: Monday, July 21, 2014 11:51 AM
To: solr-user@lucene.apache.org
Subject: Re: Solr schema.xml query analyser

Thanks Jack for the reply.

I did not mention the query time analyzer in my post because I wasn't sure
what should be put there.

With regards to your reply, If I put the query term in quotes, would I get a
match for the following:

Indexed field value: foo bar
Query term: foo bar xyz/xyz foo bar

I believe it should not as it will be looking for the exact term present in
both the places.

However I want it to behave in the following way:

    If query= foo bar and textExactMatch= foo, I SHOULD NOT get a MATCH
    If query= foo bar and textExactMatch= foo bar, I SHOULD get a MATCH
    If query= foo bar and textExactMatch= xyz foo bar/foo bar xyz, I SHOULD
get a MATCH

Thanks in advance.




--
View this message in context: 
http://lucene.472066.n3.nabble.com/Solr-schema-xml-query-analyser-tp4148317p4148327.html
Sent from the Solr - User mailing list archive at Nabble.com. 


Re: Solr schema.xml query analyser

Posted by prashantc88 <pr...@searshc.com>.
Thanks Jack for the reply.

I did not mention the query time analyzer in my post because I wasn't sure
what should be put there.

With regards to your reply, If I put the query term in quotes, would I get a
match for the following:

Indexed field value: foo bar
Query term: foo bar xyz/xyz foo bar

I believe it should not as it will be looking for the exact term present in
both the places.

However I want it to behave in the following way:

    If query= foo bar and textExactMatch= foo, I SHOULD NOT get a MATCH
    If query= foo bar and textExactMatch= foo bar, I SHOULD get a MATCH
    If query= foo bar and textExactMatch= xyz foo bar/foo bar xyz, I SHOULD 
get a MATCH 

Thanks in advance.




--
View this message in context: http://lucene.472066.n3.nabble.com/Solr-schema-xml-query-analyser-tp4148317p4148327.html
Sent from the Solr - User mailing list archive at Nabble.com.

Re: Solr schema.xml query analyser

Posted by Jack Krupansky <ja...@basetechnology.com>.
If you don't specify a "query" analyzer, Solr will use the "index" analyzer 
at query time.

But... at query time there is something called a "query parser" which 
typically breaks the query into separate terms, delimited by white space, 
and then calls the analyzer for each term, separately.

You can put the entire query in quotes or escape the space with a backslash.

Of, just use the edismax query parser with the "pf" or "pf2" parameters and 
then Solr will boost exact phrase matches even if not quoted or escaped.

-- Jack Krupansky

-----Original Message----- 
From: prashantc88
Sent: Monday, July 21, 2014 11:29 AM
To: solr-user@lucene.apache.org
Subject: Solr schema.xml query analyser

0 down vote favorite


I am a complete beginner to Solr and need some help.

My task is to provide a match when the search term contains the indexed
field.

For example:

    If query= foo bar and textExactMatch= foo, I should not get a MATCH
    If query= foo bar and textExactMatch= foo bar, I should get a MATCH
    If query= foo bar and textExactMatch= xyz foo bar/foo bar xyz, I should
get a MATCH

I am indexing my field as follows:

<fieldType name="textExactMatch" class="solr.TextField"
positionIncrementGap="100">
            <analyzer type="index">
                    <tokenizer class="solr.KeywordTokenizerFactory"/>
                    <filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt"/>
                    <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>

So I'm indexing the text for the field as it is without breaking it further
down. Could someone help me out with how should I tokenize and filter the
field during query time.




--
View this message in context: 
http://lucene.472066.n3.nabble.com/Solr-schema-xml-query-analyser-tp4148317.html
Sent from the Solr - User mailing list archive at Nabble.com.