This happening because query parser pre-tokenizes your query using whites 
paces. It is tokenized before it reaches your query analyzer.
And you are using KeywordTokenizer in your field definition.

Is there a special reason for you to use KeywordTokenizer ?


--- On Thu, 11/18/10, Chamnap Chhorn <chamnapchh...@gmail.com> wrote:

> From: Chamnap Chhorn <chamnapchh...@gmail.com>
> Subject: Re: Must require quote with single word token query?
> To: solr-user@lucene.apache.org
> Date: Thursday, November 18, 2010, 5:19 AM
> Thanks for your reply. Here is some
> other details:
> 
> 1. Keyphrase field definition:
>    <field name="keyphrase"
> type="text_keyword" indexed="true" stored="false"
> multiValued="true"/>
> 
> 2. I'm using solr 1.4.
> 
> 3. My dismax definition is the original configuration after
> install solr:
>   <requestHandler name="dismax"
> class="solr.SearchHandler" >
>     <lst name="defaults">
>      <str
> name="defType">dismax</str>
>      <str
> name="echoParams">explicit</str>
>      <float
> name="tie">0.01</float>
>      <str name="qf">
>         text^0.5 features^1.0 name^1.2
> sku^1.5 id^10.0 manu^1.1 cat^1.4
>      </str>
>      <str name="pf">
>         text^0.2 features^1.1 name^1.5
> manu^1.4 manu_exact^1.9
>      </str>
>      <str name="bf">
>         popularity^0.5
> recip(price,1,1000,1000)^0.3
>      </str>
>      <str name="fl">
>         id,name,price,score
>      </str>
>      <str name="mm">
>         2&lt;-1 5&lt;-2
> 6&lt;90%
>      </str>
>      <int
> name="ps">100</int>
>      <str
> name="q.alt">*:*</str>
>      <!-- example highlighter
> config, enable per-query with hl=true -->
>      <str name="hl.fl">text
> features name</str>
>      <!-- for this field, we want no
> fragmenting, just highlighting -->
>      <str
> name="f.name.hl.fragsize">0</str>
>      <!-- instructs Solr to return
> the field itself if no query terms are
>           found -->
>      <str
> name="f.name.hl.alternateField">name</str>
>      <str
> name="f.text.hl.fragmenter">regex</str> <!--
> defined below -->
>     </lst>
>   </requestHandler>
> 
> 4. Here is the result returned back of the original query:
> smart mobile.
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <response>
> 
> <lst name="responseHeader">
>  <int name="status">0</int>
> 
>  <int name="QTime">1</int>
>  <lst name="params">
> 
>   <str name="debugQuery">on</str>
>   <str name="fl">uuid,name,fap</str>
> 
>   <str name="indent">true</str>
>   <str name="q">smart mobile</str>
> 
>   <str name="qf">keyphrase</str>
>   <str name="defType">dismax</str>
> 
>  </lst>
> </lst>
> <result name="response" numFound="0" start="0"/>
> 
> <lst name="debug">
> 
>  <str name="rawquerystring">smart mobile</str>
> 
>  <str name="querystring">smart mobile</str>
>  <str
> name="parsedquery">+((DisjunctionMaxQuery((keyphrase:smart))
> DisjunctionMaxQuery((keyphrase:mobile)))~2) ()</str>
> 
>  <str
> name="parsedquery_toString">+(((keyphrase:smart)
> (keyphrase:mobile))~2) ()</str>
> 
>  <lst name="explain"/>
>  <str name="QParser">DisMaxQParser</str>
> 
>  <null name="altquerystring"/>
>  <null name="boostfuncs"/>
> 
>  <lst name="timing">
>   <double name="time">1.0</double>
> 
>   <lst name="prepare">
>     <double
> name="time">1.0</double>
> 
>     <lst
> name="org.apache.solr.handler.component.QueryComponent">
>      <double
> name="time">1.0</double>
> 
>     </lst>
>     <lst
> name="org.apache.solr.handler.component.FacetComponent">
> 
>      <double
> name="time">0.0</double>
>     </lst>
> 
>     <lst
> name="org.apache.solr.handler.component.MoreLikeThisComponent">
>      <double
> name="time">0.0</double>
> 
>     </lst>
>     <lst
> name="org.apache.solr.handler.component.HighlightComponent">
> 
>      <double
> name="time">0.0</double>
>     </lst>
> 
>     <lst
> name="org.apache.solr.handler.component.StatsComponent">
>      <double
> name="time">0.0</double>
> 
>     </lst>
>     <lst
> name="org.apache.solr.handler.component.DebugComponent">
> 
>      <double
> name="time">0.0</double>
> 
>     </lst>
> 
>   </lst>
>   <lst name="process">
>     <double
> name="time">0.0</double>
> 
>     <lst
> name="org.apache.solr.handler.component.QueryComponent">
>      <double
> name="time">0.0</double>
> 
>     </lst>
>     <lst
> name="org.apache.solr.handler.component.FacetComponent">
> 
>      <double
> name="time">0.0</double>
>     </lst>
> 
>     <lst
> name="org.apache.solr.handler.component.MoreLikeThisComponent">
>      <double
> name="time">0.0</double>
> 
>     </lst>
>     <lst
> name="org.apache.solr.handler.component.HighlightComponent">
> 
>      <double
> name="time">0.0</double>
> 
>     </lst>
> 
>     <lst
> name="org.apache.solr.handler.component.StatsComponent">
>      <double
> name="time">0.0</double>
> 
>     </lst>
>     <lst
> name="org.apache.solr.handler.component.DebugComponent">
> 
>      <double
> name="time">0.0</double>
>     </lst>
> 
>   </lst>
> 
>  </lst>
> </lst>
> </response>
> 
> 5. Here is parsed query with "smart mobile" (with quotes)
> which returns the
> result:
> 
> <lst name="debug">
>  <str name="rawquerystring">"smart
> mobile"</str>
> 
>  <str name="querystring">"smart mobile"</str>
> 
> 
>  <str
> name="parsedquery">+DisjunctionMaxQuery((keyphrase:smart
> mobile)) ()</str>
> 
>  <str name="parsedquery_toString">+(keyphrase:smart
> mobile) ()</str>
> 
>  <lst name="explain">
>   <str
> name="D297A64B-D4BA-4445-B63E-726E5A4F758D">
> 
> 4.503682 = (MATCH) sum of:
>   4.503682 = (MATCH) fieldWeight(keyphrase:smart
> mobile in 13092), product of:
>     1.0 = tf(termFreq(keyphrase:smart mobile)=1)
>     10.29413 = idf(docFreq=1, maxDocs=21748)
>     0.4375 = fieldNorm(field=keyphrase,
> doc=13092)
> 
> </str>
>  </lst>
> 
> 6. Here, I tried to use automatic phrase query (pf
> parameter): doesn't
> return any results.
> http://localhost:8081/solr/select?q=smart%20mobile&qf=keyphrase&pf=keyphrase&debugQuery=on&defType=dismax
> 
>  <str name="rawquerystring">smart mobile</str>
> 
>  <str name="querystring">smart mobile</str>
>  <str
> name="parsedquery">+((DisjunctionMaxQuery((keyphrase:smart))
> DisjunctionMaxQuery((keyphrase:mobile)))~2)
> DisjunctionMaxQuery((keyphrase:smart mobile))</str>
> 
>  <str
> name="parsedquery_toString">+(((keyphrase:smart)
> (keyphrase:mobile))~2) (keyphrase:smart
> mobile)</str>
> 
>  <lst name="explain"/>
> 
>  <str name="QParser">DisMaxQParser</str>
> 
>  <null name="altquerystring"/>
>  <null name="boostfuncs"/>
> 
> Thanks
> Chamnap
> 
> On Wed, Nov 17, 2010 at 8:10 PM, Erick Erickson 
> <erickerick...@gmail.com>wrote:
> 
> > Try qt=dismax or deftype=dismax, I was also getting 0
> results with
> > defType on 1.4.1. I'll see what's up with that...
> >
> > But if that doesn't work...
> >
> > May we see your dismax definition too? You shouldn't
> need the
> > quotes, so something's wrong somewhere....
> >
> > What version of Solr are you using?
> >
> > Also, please post the results of running your original
> query
> > with &debugQuery=on
> >
> > Best
> > Erick
> >
> > On Tue, Nov 16, 2010 at 10:28 PM, Chamnap Chhorn
> <chamnapchh...@gmail.com
> > >wrote:
> >
> > > I have one question related to single word token
> with dismax query. In
> > > order
> > > to be found I need to add the quote around the
> search query all the time.
> > > This is quite hard for me to do since it is part
> of full text search.
> > >
> > > Here is my solr query and field type definition
> (Solr 1.4):
> > >    <fieldType name="text_keyword"
> class="solr.TextField"
> > > positionIncrementGap="100">
> > >      <analyzer>
> > >        <tokenizer
> class="solr.KeywordTokenizerFactory"/>
> > >        <filter
> class="solr.LowerCaseFilterFactory" />
> > >        <filter
> class="solr.TrimFilterFactory" />
> > >        <filter
> class="solr.StopFilterFactory" ignoreCase="true"
> > > words="stopwords.txt"
> enablePositionIncrements="true"/>
> > >        <filter
> class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
> > > ignoreCase="true" expand="false" />
> > >        <filter
> class="solr.RemoveDuplicatesTokenFilterFactory"/>
> > >      </analyzer>
> > >    </fieldType>
> > >
> > >    <field name="keyphrase"
> type="text_keyword" indexed="true"
> > > stored="false" multiValued="true"/>
> > >
> > > With this query
> >
> q=smart%20mobile&qf=keyphrase&debugQuery=on&defType=dismax,
> > > solr returns nothing. However, with quote on the
> search query q="smart
> > >
> mobile"&qf=keyphrase&debugQuery=on&defType=dismax,
> the result is found.
> > >
> > > Is it a must to use quote for a single word token
> field?
> > >
> > > --
> > > Chhorn Chamnap
> > > http://chamnapchhorn.blogspot.com/
> > >
> >
> 
> 
> 
> -- 
> Chhorn Chamnap
> http://chamnapchhorn.blogspot.com/
> 


 

Reply via email to