mark rammmy
mark rammmy

Reputation: 1498

solr like search using custom type

I am using Solr. I need to search those keyword which we get by using like for example i want to search for x1 carbon , in my sql i search i get the correct result

select * from table where name like "%x1 carbon%"

In solr i get the correct result but i donot get entries with say for example,but i get the below entries in mysql using like "%text%"

x1 carbon x1 carbon x1 carbon .................

My schema is below

<fieldType name="text_general_k" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>  

What should i do to get the above vaules also like

someword_x1 carbon

and

someword_x1 carbon_ ?

with this schema im not getting

<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

    <fieldType name="text_general_k" 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"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" /> 
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

Im attaching the sceenshot of query analyuzer

enter image description here

Upvotes: 0

Views: 68

Answers (1)

Abhijit Bashetti
Abhijit Bashetti

Reputation: 8668

Can you try below custom field type for you field.

<fieldType name="likeField" 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"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" /> 
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

With the configuration below the string value Nigerian gets broken down to the following terms

Nigerian => "ni", "nig", "nige", "niger", "nigeri", "nigeria", "nigeria", "nigerian"

Upvotes: 1

Related Questions