If you have a field of type 'text_general', searching for:

 q=good microwave

Will find any documents with either 'good' or 'microwave' in them.

Searching for:

  q="good microwave"

will find any documents that contain both terms next to each other.

  q="good microwave"^5 good microwave

will find any documents that contain either term, but will boost
documents that contain the terms next to each other above those that
don't.

Note also, when Lucene scores a document, it uses a 'co-ordination
factor' which takes into account the number of query terms that matched
your document. Thus, a document matching both terms will score more
highly than a document only matching one of them.

So, a part of the question is whether you wish to *only* show documents
that include both terms, or whether you are happy for good matches to be
prioritised.

Upayavira

On Sun, Feb 10, 2013, at 05:27 PM, Pragyanshis Pattanaik wrote:
> Hi,
> I did one work around to get all documents that contains "Good" or
> "Microwave" or "Good Microwave",if i will pass "Good Microwave" as q
> parameter please guide me wheather i am going in right direction or not.
> I defined two field type(text_general and shingleString) in my schema
> like below
> <fieldType name="text_general" class="solr.TextField"
> positionIncrementGap="100">      <analyzer type="index">       
> <tokenizer class="solr.StandardTokenizerFactory"/>        <filter
> class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"
> enablePositionIncrements="true" />                <filter
> class="solr.LowerCaseFilterFactory"/>      </analyzer>      <analyzer
> type="query">        <tokenizer class="solr.StandardTokenizerFactory"/>  
>      <filter class="solr.StopFilterFactory" ignoreCase="true"
> words="stopwords.txt" enablePositionIncrements="true" />               
> <filter class="solr.LowerCaseFilterFactory"/>      </analyzer>   
> </fieldType>
> <fieldType name="shingleString" class="solr.TextField"
> positionIncrementGap="100" omitNorms="true">  <analyzer type="index">   
> <tokenizer class="solr.KeywordTokenizerFactory"/>    <filter
> class="solr.LowerCaseFilterFactory"/>    <filter
> class="solr.PositionFilterFactory" />  </analyzer>  <analyzer
> type="query">    <tokenizer class="solr.KeywordTokenizerFactory"/>   
> <filter class="solr.ShingleFilterFactory" outputUnigrams="true"
> outputUnigramIfNoNgram="true" maxShingleSize="99"/>    <filter
> class="solr.PositionFilterFactory" />    <filter
> class="solr.LowerCaseFilterFactory"/>  </analyzer></fieldType>
> then while indexing i am adding all these field to two different copy
> fields like below.
> <field name="SearchableField" type="shingleString" indexed="true"
> stored="false" multiValued="true"/>   <copyField source="ProductName"
> dest="SearchableField"/>         <copyField source="ProductDesription"
> dest="SearchableField"/> <copyField source="Product Feedback"
> dest="SearchableField"/>
> <field name="SearchableField1" type="text_general" indexed="true"
> stored="false" multiValued="true"/>   <copyField source="ProductName"
> dest="SearchableField1"/>        <copyField source="ProductDesription"
> dest="SearchableField1"/>        <copyField source="Product Feedback"
> dest="SearchableField1"/>
> And now if i am querying on both the fields SearchableField and
> SearchableField1 i am getting all the documents which contains "Good" or
> "Microwave" or "Good Microwave".Below is the query i am using to get all
> the
> documents.q=SearchableField%3AGood+Microwave%0ASearchableField1%3AGood+Microwave
> But the documents containing the whole phrase "Good Microwave",are
> getting a very low score.Can anybody guide me to get a higher score on
> those documents which contains the whole phrase if at all my approach is
> correct ?
> Or can anybody guide me to achieve this ?
> Thanks,Pragyanshis
> > From: pragyans...@outlook.com
> > To: solr-user@lucene.apache.org
> > Subject: Search a Phrase
> > Date: Thu, 7 Feb 2013 19:29:04 +0530
> > 
> > 
> > 
> > 
> > Hi,
> > 
> > My schema is like below
> > 
> > <fields>   
> >     <field name="ProductId" type="int" indexed="true" stored="true" />    
> >     <field name="ProductName" type="text_general" indexed="true" 
> > stored="true" required="true" />
> >     <field name="ProductDesription" type="string" indexed="true" 
> > stored="true" required="true" />
> >     <field name="Product Rating" type="int" indexed="true" stored="true" 
> > required="true" />
> >     <field name="Product Feedback" type="text_general" indexed="true" 
> > stored="true" required="true" />
> > </fields>
> > 
> > and my text_general field is like below
> > 
> > <fieldType name="text_general" class="solr.TextField" 
> > positionIncrementGap="100">
> >       <analyzer type="index">
> >         <tokenizer class="solr.StandardTokenizerFactory"/>
> >         <filter class="solr.StopFilterFactory" ignoreCase="true" 
> > words="stopwords.txt" enablePositionIncrements="true" />        
> >         <filter class="solr.LowerCaseFilterFactory"/>
> >       </analyzer>
> >       <analyzer type="query">
> >         <tokenizer class="solr.StandardTokenizerFactory"/>
> >         <filter class="solr.StopFilterFactory" ignoreCase="true" 
> > words="stopwords.txt" enablePositionIncrements="true" />
> >         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" 
> > ignoreCase="true" expand="true"/>
> >         <filter class="solr.LowerCaseFilterFactory"/>
> >       </analyzer>
> >     </fieldType>
> > 
> > How can i search a Phrase("Good Microwave") over ProductDesription and 
> > Product Feedback field ?
> > Here some documents might contain only "Good" and some might contain only 
> > "Microwave".
> > 
> > How to get all  documents that contains "Good" or "Microwave" or "Good 
> > Microwave",if i will pass "Good Microwave" as q parameter  ?
> > 
> > 
> > 
> > Thanks in advance
> > 
> > 
> >                                       
>                                         

Reply via email to