0

I am a beginner to Rails and I am using Sunspot for implementing search functionality.

I want to search for patients names. Up to now im searching using the fulltext method and it is working. However I want to achieve the following functionality.

If the name is John Smith, I want this result to be shown when i search with the string 'Smi'

I was consulting the Sunspot documentation but didn't find a solution

Brian Webster
  • 30,033
  • 48
  • 152
  • 225
interboy
  • 856
  • 1
  • 11
  • 25

1 Answers1

0

If you want return substrings in fulltext search, you can take a look Full text Searching.

If you want to do pagination of your result that comes from search than 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>

Do not forget to restart the server and reindex your models for the changes to take effect.

sjain
  • 23,126
  • 28
  • 107
  • 185