私は Rails の初心者で、Sunspot を使用して検索機能を実装しています。
患者の名前を検索したい。これまで、フルテキスト方式を使用して検索しており、機能しています。ただし、次の機能を実現したいと考えています。
名前が John Smith の場合、「Smi」という文字列で検索したときにこの結果が表示されるようにしたい
Sunspot のドキュメントを参照していましたが、解決策が見つかりませんでした
私は Rails の初心者で、Sunspot を使用して検索機能を実装しています。
患者の名前を検索したい。これまで、フルテキスト方式を使用して検索しており、機能しています。ただし、次の機能を実現したいと考えています。
名前が John Smith の場合、「Smi」という文字列で検索したときにこの結果が表示されるようにしたい
Sunspot のドキュメントを参照していましたが、解決策が見つかりませんでした
全文検索で部分文字列を返したい場合は、全文検索をご覧ください。
検索結果のページネーションを行いたい場合は、結果sunspot_solr.rb
のページネーション用のファイルを次のように追加できますmyapp/config/initializers/
。
Sunspot.config.pagination.default_per_page = 100
この場合、100 件の結果を返します。
追加した:
あなたのschema.xml
ファイルはyourappfolder/solr/conf
<filter class="solr.NGramFilterFactory"/>
また、任意の部分文字列に一致するように追加することもできます。
これは私の特定の設定です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>
変更を有効にするために、サーバーを再起動してモデルのインデックスを再作成することを忘れないでください。