
最後に、私は集まってこのシリーズの別の記事を書きました。 次に、Apache SolrでDrupalをロシア語で全文検索する方法について説明します。
原則として、この資料はどの言語にも適用できますが、明らかな理由から、ロシア語を選択しました。 このシリーズの最初の記事の終わりに、ロシア語の検索を改善する方法について書きました。 この方法は簡単ですが、あまり効果的ではありません。 デフォルトで可能な最大値は、単語の終わりで動作することです。 簡単な例を考えてみましょう。 「気候」という言葉は、気候という言葉に含まれています。

しかし、すでに気候という言葉では結果はありません。
検索をより柔軟にするために、追加の辞書を接続します。 ステミングにHunspellStemFilterFactoryクラスを使用しました。
ここからロシア語の辞書を
ダウンロード-download.services.openoffice.org/files/contrib/dictionaries/ru_RU-pack.zipru_RU.affとru_RU.dicの2つのファイルが必要です。 それらはutf-8に変換する必要があります。そうしないと、apache solrはそれらで動作しません。
最初は、iconvを使用してエンコーディングを変更しようとしましたが、solrはそれらを使用しませんでした。
最後に、Krusaderを介してファイルをUTF-8に再保存しました-その後、すべてが正常に機能しました。
ファイルを変換したら、schema.xmlがある同じsolrフォルダーにファイルを配置する必要があります
スキーマ(schema.xml)で、HunspellStemFilterFactoryと辞書を使用することを示します。
<filter class="solr.HunspellStemFilterFactory" dictionary="ru_RU.dic" affix="ru_RU.aff" ignoreCase="true" />
<fieldType name="text" class="solr.TextField" indexed="true" stored="true" multiValued="true" positionIncrementGap="100"> <analyzer type="index"> ... <filter class="solr.HunspellStemFilterFactory" dictionary="ru_RU.dic" affix="ru_RU.aff" ignoreCase="true" /> ... <analyzer type="query"> ... <filter class="solr.HunspellStemFilterFactory" dictionary="ru_RU.dic" affix="ru_RU.aff" ignoreCase="true" /> ...
さらに、インデックスのアナライザーでHunspellStemFilterFactoryを定義した後、単語を部分(グラム)に分割するための設定を追加します。 これにより、検索がより柔軟になります。
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="25" side="front" /> <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="25" side="back" />
ポーターフィルターを有効にしていた場合
<filter class="solr.SnowballPorterFilterFactory" language="Russian" protected="protwords.txt"/>
コメントアウトすることを忘れないでください。
solrをリロードして、コンテンツのインデックスを再作成します。 検索がはるかにうまく機能していることがわかります! 次に例を示します。


他の言語の辞書でも同じことができます。 辞書の全リスト
-download.services.openoffice.org/files/contrib/dictionaries既製の辞書を使用するだけでなく、独自のルールを作成することもできます。
ロシア語のsolrの辞書には「wombat」という単語がないことに気付き、追加することにしました。 これを行うには、最初にru_RU.affファイルに移動し、適切な結末を探します。 「wombat」という語の末尾はゼロであり、次の規則が適用されます。
SFX K 0 a [^ uoy]
SFX K 0 y [^ uoy]
SFX K 0オーム[^ ezhotschshsh]
SFX K 0 e [^ uoy]
SFX K 0 s [^ gezhyhokhshshsh]
SFX K 0および[gzhkhkhshshsh]
SFX K 0彼女
SFX K 0 s [^
SFX K 0 am [^ uoy]
SFX K 0 ami [^ uoy]
Sfx k 0 ah [^ uoy]
ウォンバット、ウォンバット...ウォンバット。
このエンディングのコードはKです。
ru_RU.dicファイルを開き、対応するコードで新しい単語を追加します

コードは、単語がどのように変化するかを説明します。 もちろん、スクリーンショットは単なる例であり、新しい単語をアルファベット順に挿入する必要があります。
solrをリロードし、コンテンツのインデックスを再作成して結果を確認します

私はapachesolr 3.6.1を使用していることを思い出します(これは重要ではありませんが、これまたは一部のバージョンでは動作しないことがあるという事実に出くわしました。 .xml)。
念のため、
スキームを添付します。何か問題が解決しない場合は、使用してみてください。