2

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

4

4 に答える 4

1

どのバージョンの Solr を実行していますか? Solr 4 を使用しているときに同様の問題に遭遇しました。Solr サーバーを再起動するとスキーマが更新されることを示していますが、インデックスはスキーマに従って変更されません。再起動とインデックスの再作成に多くの時間を費やした後、更新された構成で新しいコア (新しいコレクション) を作成しました。

したがって、完全に新しいコアを作成してみて、それが役立つかどうかを確認してください。幸運を!

于 2013-01-27T11:58:48.327 に答える
0

Solr 4 を使用している場合、これをトラブルシューティングするための最善の策は、管理インターフェイスの [分析] ウィンドウに移動し、インデックスとクエリ インターフェイスに対していくつかのテスト文字列を実行することです。「テキスト」タイプの任意のフィールドを選択するか、ドロップダウンでタイプ自体を選択できます。

あなたの特定の設定では、すべての単語について、先頭の 1 文字 (本当に?) から 15 までの開始サブセットに一致させたいと言っているようです。したがって、誰かが「a」を検索すると、すべての単語が取得されます。 「あ」から始まります。それはあなたが望むものですか?

黒点部分のトラブルシューティングを試みる前に、これをすべて試してください。

于 2013-01-27T03:06:17.770 に答える