Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you enable partial matching with "sunspot for rails"?

I just have done setting up sunspot_rails and it seems working well except one thing. After I made 3 records like below

  1. name=John
  2. name=John2
  3. name=John3

when I search with the keyword "John", only 1st record shows up. it looks like complete matching. I'd like to have all of them to be appeared as search result.

Is this supposed to be happened as default? or did I setup something wrong??

like image 384
MKK Avatar asked Jun 23 '12 05:06

MKK


Video Answer


1 Answers

If you want return substrings in fulltext search, you can take a look in

https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search

Also you can add a file sunspot_solr.rb for pagination of results in myapp/config/initializers/ with:

Sunspot.config.pagination.default_per_page = 100

return 100 results for this case.

Added:

Your schema.xml file is founded in yourappfolder/solr/conf

Also you can add <filter class="solr.NGramFilterFactory"/> to match arbitrary substrings.

This is my particular config for schema.xml:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
<fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldtype>

For me it does works fine with full strings and substrings for all keywords. Please do not forget to restart the server and reindex your models for the changes to take effect.

Regards!

like image 88
hyperrjas Avatar answered Sep 28 '22 08:09

hyperrjas