SOLR を使用して Rails アプリで部分的な単語を検索しようとしています。これには、schema.xml ファイルを変更する必要があります。他の人が示唆したように、「app_root/solr/conf/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 name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
これらの変更を行った後、rake コマンドを実行するrake sunspot:reindex
と、100% 完全な再インデックスの結果が得られます。次に、サーバーを起動します...ただし、部分的な単語ではなく、完全な単語に対してのみ応答が返されます。
念のため、Style モデルの関連コードを次に示します。
searchable do
text :full_name
#full_name is just one of Style's attribute columns
end
そしてフェッチを行うコード...
if params[:sSearch].present?
@search = Style.search do
fulltext params[:sSearch]
end
styles = @search.results
end
どんな助けでも大歓迎です。
参照については、次を参照してください。
https://github.com/sunspot/sunspot/blob/master/README.md
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.EdgeNGramFilterFactory