7

Solr + Sunspotを使用して、バイリンガルのFR-ENサイトのインデックスを作成したいと思います。問題:モデル投稿はフランス語または英語の両方で書くことができます。実行時に言語を判別できますが、それに応じてモデルにインデックスを付けるためにSolrも必要です。

EG:フランスのモデルの場合、フランスのステマーが必要です。

<filter class="solr.SnowballPorterFilterFactory" language="French"/>

私のオプションは何ですか?実行時にSolrアナライザーを変更できますか?言語ごとにアナライザーのセットを作成できますか?

4

2 に答える 2

10

これは素晴らしい質問であり、Sunspot に含めるために議論されている機能です。

Sunspot は、動的フィールド命名規則を使用してスキーマをセットアップします。たとえば、テキスト フィールドの 2 つの既存の定義を次に示します。

<dynamicField name="*_text" stored="false" type="text" multiValued="true" indexed="true"/>
<dynamicField name="*_texts" stored="true" type="text" multiValued="true" indexed="true"/>

これらfieldType name="text"は、スキーマで以前に定義されたものに対応しています。

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

インデックスを作成したいさまざまな言語に同様の定義を追加し (Mauricio も言及しているように)、dynamicFieldそれらを使用するためにいくつかの新しい定義をセットアップすることができます。

1.fieldTypeフランス語のテキスト フィールドの定義

<fieldType name="text_fr" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="French"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

2.dynamicFieldフランス語のテキスト フィールドの定義

<dynamicField name="*_text_fr" stored="false" type="text" multiValued="true" indexed="true"/>
<dynamicField name="*_texts_fr" stored="true" type="text" multiValued="true" indexed="true"/>

3. Sunspot でフランス語のテキスト フィールドを使用する

最新の Sunspot 1.2 (まだリリースされていない — 1.2.rc4 を使用) は:as、フィールド名を指定できるオプションをサポートしています。

searchable do
  text :description, :as => 'description_text_fr'
end

私が言ったように、これは Sunspot 1.3 または 1.4 に追加することを考えているものです。:lang => :en個人的には、適切なフィールド定義を選択するためにテキスト フィールド定義のようなものを見たいと思っています。Sunspot のメーリング リストに、ぜひご意見をお寄せください。

于 2010-12-22T20:31:17.847 に答える
2

Sunspot については何も言えませんが、純粋な Solr では、Solr スキーマに個別のフィールド タイプを作成し (フランス語用に 1 つのフィールド タイプ、英語用に別のフィールド タイプ)、英語のコンテンツ用に 1 つのフィールド (英語のフィールド タイプを使用) を作成し、別のフィールドを作成します。フランス語のコンテンツの場合 (French fieldType を使用)。

実行時に使用する言語がわかっているので、いずれかのフィールドを選択して検索を実行し、結果を取得します。

于 2010-12-22T19:47:02.890 に答える