web-dev-qa-db-ja.com

多言語Elasticsearchインデックス作成のベストプラクティス/経験

Elasticsearchでの多言語の索引付けと検索に使用されるベストプラクティスまたは経験は何ですか。私はいくつかのリソースを読みましたが、それを抽出できる限り、インデックス作成に使用できるオプションは次のとおりです。

  1. 言語ごとに個別のインデックス。

  2. 多言語フィールドのマルチフィールドタイプ。

  3. 可能なすべての言語の個別のフィールド。

したがって、これらのオプションのいずれか(または私が見逃した他のオプション)を選択することの副作用は何であるかと思います。インデックスを増やしてもクラスターが遅くなることはないと思います(膨大な数の言語でない場合)ので、おそらくより簡単なメンテナンスを除いて、2または3を選択することで何が得られるかわかりません。

どんな助けでも歓迎します!

29
ilijaluve

少し古い質問ですが、情報はとにかく役立つかもしれません。インデックス/マッピング構造は主にユースケースに依存します。
すべての言語を同時に使用する必要がありますか、それとも一度に1つの言語のみを使用しますか?

  • オプション1 :たとえば多言語のWebサイト-ユーザーは、選択した現在の言語でのみ表示および検索します。この場合、特に言語を簡単に追加および削除できるようにする必要がある場合は、index-per-langが優れたソリューションになると私の経験では考えています。データ量はインデックス間で分離されます(パフォーマンス上の利点)。言語ごとにアナライザーを簡単に設定できます。特に、設定が言語名によってのみ異なる場合に便利です。個人的に私は自分のプロジェクトの1つにこのオプションを現在使用しています

オプション2および3の一般的な注意事項:これらのオプションのいずれかを使用すると、スコアリングを定義できる言語に基づいて、ドキュメントに異なるスコアを付けることができます各言語フィールド。言語を追加する必要がある場合は、マッピングに新しいフィールドを追加できますが、既存のフィールドを削除または変更する方法はありません。したがって、すべてのコンテンツのインデックスを再作成し、削除された言語のプロパティを空に設定する必要があります。新しい言語ごとに新しいアナライザーを追加する必要があります。ただし、最初にインデックスを閉じて、変更後にインデックスを開く必要があります。

  • オプション2 一度にすべての言語で検索する必要がある場合マルチフィールドでは、すべての言語に対応できるため、最も簡単にアクセスできます一度にサブフィールド:
 
 "book_title":{
 "type": "multi_field"、
 "fields":{
 "english":{
 "type": "string" 
}、
 "german":{
 "type": "string" 
}、
 "イタリア語":{
 "タイプ": "文字列" 
}、
} 
} 
 

ここでは、特定の言語(例: "book_title.english")またはすべての言語( "book_title"を使用)で検索できます。 "book_title"の名前を使用してフィールドを更新するが、 "book_title。[language]"を使用するように注意してください /。 "book_title"を使用すると、すべてのサブフィールドが同一のデータで更新されます(これはおそらく望んでいるものではありません)

  • オプション3 :完全に分離されたフィールド-オプション2のように検索する必要がある場合、すべてを検索クエリに含める必要があります。すべてを上書きできないため、インデックス作成の点でより安全です誤って言語

  • オプション4のアイデア-言語ごとのタイプを使用:ドキュメントのタイプが1つしかない場合に使用できます。言語ごとに異なるフィールドを持つことができます。複数のドキュメントタイプがある場合は役に立たない

20
Shote

他の人が答えを探している場合は、ElasticSearchサイトのドキュメントへの直接リンクを次に示します。 https://www.elastic.co/guide/en/elasticsearch/guide/current/mixed-lang-fields .html

1
blockcipher

すべてはユースケースに依存すると思います。ローカライズできないフィールドには冗長なデータがたくさんあるため、混合言語(ロケール)を持つ複数のフィールドがある場合、オプション1は最適ではないと思います。その場合、オプション2の方が適している場合があります。

0
W. Itte

私はオプション1(言語ごとに個別のインデックス)を使用することをお勧めします Elasticsearchのドキュメントによる -周波数の問題。

ドキュメントに複数の言語が含まれている場合は、複数のインデックスを設定し、 field collapsing query-timeを使用して、同じドキュメントが重複して返されるのを防ぐことができます。

0