5

私はsunspot_railsのセットアップを終えたばかりで、1つのことを除いてうまく機能しているようです. 以下のように3つのレコードを作成した後

  1. 名前=ジョン
  2. 名前=ジョン2
  3. 名前=ジョン3

「ジョン」というキーワードで検索すると、最初のレコードしか表示されません。完全一致のようです。それらすべてを検索結果として表示させたいのですが。

これはデフォルトで発生するはずですか?または、何か間違った設定をしましたか??

4

2 に答える 2

8

全文検索で部分文字列を返したい場合は、

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

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>

私にとっては、すべてのキーワードの完全な文字列と部分文字列で問題なく動作します。変更を有効にするために、サーバーを再起動してモデルのインデックスを再作成することを忘れないでください。

よろしく!

于 2012-06-23T08:22:10.400 に答える
0

ありがとう!!!

女の子のコントローラーからブロックする(girls_controller.rb)

def index

  @search = Girl.search do  
    fulltext params[:search]  
  end  
  @girls = @search.results 

#    @girls = Girl.all
#
#    respond_to do |format|
#      format.html # index.html.erb
#      format.json { render json: @girls }
#    end
end

女の子モデルからのブロック(girl.rb)

searchable do 
  text :name_en, :name_es, name_ja
end
于 2012-06-23T06:54:05.977 に答える