SOLRを新しいインフラとして検討しています

トピック作成者:ks-solruserml-bot (2024/06/09 20:34 投稿)
12
CloseClose

(The bot translated the original post https://lists.apache.org/thread/rhvpztwrb367x9oz8hh4w2q4hdpxsz3y into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは!

リストに初めて投稿します。私たちはSOLRについて知りましたが、現在のElasticsearchインフラを置き換えることに興奮しています。現在、私たちの主な問題は、各マシンで実行されるデータとモデルのサイズに関するものです。

私たちのセットアップ:

  1. 以下の検索アーキテクチャを使用しています:第1ティア、高速検索(応答時間が短い)で、最も取得される可能性の高いデータを取得します。
  2. 残りのデータ(オンディスクデータを含む)を使用する2番目のティア

私たちはSOLRの提供するすべての機能(SOLRのウェブページ)を見ましたが、特に以下のことについて尋ねたいと思います:

  1. テキスト検索とベクトル類似性を行うことはできますか?
  2. メタデータでフィルタリングすることはできますか?
  3. インデックス/メモリの消費についてどうですか? 第1ティアでは、メモリに4000Mの埋め込みベクトル(128 fp32)+メタデータが必要です。
  4. モデルをDB内で実行できますか?(SOLRの外ではなく)ユーザーごとのモデルがあり、データをDBの外に移動するのを防ぐために、TensorFlowモデルをデータベースで実行する方法が必要です。
  5. サブセカンドのクエリ
  6. 新しいデータのリアルタイム(またはほぼリアルタイム)のインデックス付け
  7. 簡単にスケーラブル

ありがとうございます!

返信投稿者:ks-solruserml-bot (2024/06/09 20:34 投稿)

SolrとESは、ほとんどの機能にLuceneを使用しているため、全体的な機能はほぼ同じです。ESができるなら、Solrもおそらく同様にできるでしょう。設定がほぼ同じであれば、SolrとESのパフォーマンスも似ているでしょう。

3番目の質問に関しては、はっきりとした答えはありません。SolrまたはESチームがESに関して推測を行っても、それは単なる推測に過ぎません。特定のサイズのインデックスを持つ1人のユーザーに適した推測が、同じサイズのインデックスを持つ別のユーザーには全く合わないかもしれません。私たちが推測するとき、常に慎重に行動します。つまり、実際に必要なものよりもはるかに多くのリソースを推奨して、十分なリソースがあることを確認します。そして、推測を行うためには、おそらくまだ持っていないかもしれない多くの情報が必要です。ESでX量のリソースで機能する場合、同じリソースがあれば、Solrでもおそらく機能するでしょう。前述のように、実際の設定が類似している場合、パフォーマンスも類似する傾向があります。

1と2: この目的のために異なるインデックスを設定できます。Solrは古いデータを自動的に別のインデックスに移動する方法を提供しません。それはインデックス作成ソフトウェアで行う必要があります。時系列データ(ログなど)の場合、SolrCloudには「時間経過に応じたエイリアス」機能があります。これは、最新のデータ用に新しいコレクションを作成し、後で別の新しいコレクションが作成されます。しかし、私はこの機能を使ったことはありませんが、概念は理解しています。

1: テキスト検索はもちろん可能です。ベクトル類似性もおそらく可能ですが、私がそれが何を意味するかわからないので、確実にyesとは言いたくありません。SolrはLuceneのTermVectorsを利用する方法を提供しています。
2: 一般的には、はい。スキーマの設定とデータの性質によって、フィルターでできることが具体的に決まります。これはESでも同様です。
3: 上記参照。
4: これが何を意味するかわかりません。しかし、前述のように、ESがそれを行うことができるなら、Solrもおそらく同様にできるでしょう。
5: 十分なリソース、特にメモリがあれば、Solrは素晴らしいパフォーマンスを発揮します。インデックスが実際に非常に大きい場合、OSがインデックスを信頼できるようにキャッシュするための十分な未割り当てメモリを確保するのは難しいかもしれません。SolrとESの両方がそれ自体ではキャッシングを行わず、OSに処理を任せています。
6: インデックス作成が速いということは、通常、インデックスを更新して変更をコミットするたびにクエリのパフォーマンスに影響を与えることを意味します。これはESにも当てはまります。
7: これは非常に曖昧な質問であり、具体的に何を意味するかを正確に知らないと答えることができません。

追加の参考資料(免責事項:このウィキページを執筆しました):
https://cwiki.apache.org/confluence/display/SOLR/SolrPerformanceProblems

ありがとうございます。
Shawn

返信投稿者:ks-solruserml-bot (2024/06/09 20:34 投稿)

Shawnさん、とても詳細な回答、非常に参考になりました。ありがとうございます!
パフォーマンスの問題に関するリンクをチェックします。

モデルの実行(質問4)に関して、もう少し説明します。
SOLRはカスタムのTensorFlow / PyTorchモデルを実行できますか? これはLuceneの機能ではなく、それの上に構築されたものです。

ありがとうございます!

返信投稿者:ks-solruserml-bot (2024/06/09 20:34 投稿)

その情報をもとに、以前よりもさらに理解が進んでいないことがわかりました。どちらのものも何か全く理解していません。Googleでも役に立たず…おそらく、最低限の理解を持つためには1〜2週間の調査が必要でしょう。機械学習に関連していると推測できましたが、それだけです。私はその分野での経験が全くありません。

Solrがそれらのソフトウェアプログラムを直接サポートしている可能性は低いですが、Solrが理解できるクエリを構築できれば、何かしらの方法で動作させることができるかもしれません。

ありがとうございます、
Shawn

返信投稿者:ks-solruserml-bot (2024/06/09 20:34 投稿)

例えば、関連性ランキングでは、通常、機械学習モデルを実行するのが一般的です。例えば、xgboostやlightgbmを使用することがあります。TensorFlowやPyTorchは、機械学習モデルを構築するための他のフレームワークです。xgboostやlightgbmは決定木のアンサンブルである一方、TensorFlowやPyTorchは主にニューラルネットワークに関連しています。

Elasticsearchでは、関連性ランキングのためにxgboostモデルを実行することができます。同様に、SOLRにもこの質問を適用できますか?関連性ランキングフェーズでPyTorchやTensorFlowを使用できるでしょうか?

返信投稿者:ks-solruserml-bot (2024/06/09 20:35 投稿)

全くわかりません。その機能には触れたことがありません。そのような用語はドキュメントには記載されていません:

https://solr.apache.org/guide/8_9/learning-to-rank.html

ありがとうございます。
Shawn

返信投稿者:ks-solruserml-bot (2024/06/09 20:35 投稿)

PyTorchとTensorFlowはどちらもPythonで書かれており、SolrとElasticsearchはどちらもJavaで書かれています。そのため、それらを内部で実行することは明らかにできません。

wunder
Walter Underwood
wunder@wunderwood.org
http://observer.wunderwood.org/ (私のブログ)

返信投稿者:ks-solruserml-bot (2024/06/09 20:35 投稿)

おそらく、これを行うにはプラグインを作成する必要があります。両方のフレームワークはJavaからも使用可能です。たとえば、TensorFlow Rankingのような一部のモデル(たとえばSVM)は、プラグインなしで直接Solrで使用できるかもしれません。

返信投稿者:ks-solruserml-bot (2024/06/09 20:35 投稿)

TensorFlowとPyTorchにはJavaのバインディングがあります。ただし、これは実際には必要ありません。トレーニングされたモデルの重みがJSONにエクスポートされる場合(少なくともTensorFlow Rankingでは可能だと見られます)、そのモデルはそのまま使用できます。たとえば、TensorFlow RankingやSolrの両方に存在するSVMやLambdaなどです。XGBoostはMultipleAdditiveTreeモデルで動作する可能性があります。

返信投稿者:ks-solruserml-bot (2024/06/09 20:36 投稿)

モデルをONNX形式にエクスポートしてから、JavaのONNX Runtime APIを使用してモデルを実行することができます。

返信投稿者:ks-solruserml-bot (2024/06/09 20:36 投稿)

このフォーラムはSolrのものですが、オープンソースの検索エンジンであるVespaについて触れておきます。個人化に強く焦点を当てたあなたのユースケースでは、Tensorと個人化された結果を重要な差別化要因として推進しているようです。VespaはLuceneベースではなく、ESやSolrで既に知っているものとはかなり異なるかもしれません。正直なところ、私はテストしたことがなく、何らかの関連もありません。こちらがリンクです:
https://vespa.ai/

Jan

返信投稿者:ks-solruserml-bot (2024/06/09 20:36 投稿)

アルバートさん、

スレッドに既にある非常に良い回答に加えて、以下の点で補足します:

  1. テキスト検索とベクトル類似性はできますか?
    Luceneはベクトル類似性を実現でき、Solrでも同様のことが可能ですが、いくつかの注意点があります。
    直接的かつ完全なサポートはまだ進行中です。以下のリソースが役立ちます:
    London Information Retrieval Meetup
    数ヶ月前にロンドン情報検索ミートアップでこのトピックについて議論しました:
    https://www.slideshare.net/SeaseLtd/interactive-questions-and-answers-london-information-retrieval-meetup
    https://www.youtube.com/watch?v=BIILaSb4aRY&t=259s
    ブログ
    私はこのトピックに関する一連のブログを開始しましたが、現時点ではまだイントロのみです:
    https://sease.io/2021/07/artificial-intelligence-applied-to-search-introduction.html
    しかし、夏の終わりまでにはLucene、Solr、Elasticsearchのエピソードを書く予定です
    トレーニング
    私たちは10月に関連するトレーニングも開催していますので、役立つと思われる場合はリンクをご覧ください:
    https://sease.io/training/artificial-intelligence-in-search-training

  2. メタデータでフィルタリングできますか?
    はい、スコアリングされたクエリとスコアリングされていないフィルタクエリを使用してElasticsearchとほぼ同様のことができます。
    ただし、これは大きなトピックですので、標準クエリパーサを確認して概要を把握してください:
    https://solr.apache.org/guide/8_9/the-standard-query-parser.html

  3. インデックス/メモリの消費についてはどうですか? 1st tier needs around
    4000Membeddings vector (128 fp32) + metadata stored in memory
    これに対する簡単な答えはありません。プロジェクトの深いレベルまで進んで、それからプロトタイプを構築し、回答を得るためのベンチマークインフラストラクチャを構築する必要があります。

  4. データベース内でモデルを実行できますか?(SOLRの外ではなく)。私たちはユーザごとのモデルを持っており、データをデータベースの外に移動させないようにTensorFlowモデルを実行する方法が必要です。
    最も近いのは、Learning To Rankの統合です。
    Apache Solrは線形モデル、木ベースのモデル、およびニューラルネットワークベースのモデルをサポートしています。
    モデルをトレーニングし、サポートされているJSON形式でエクスポートし、それを使用する必要があります:
    https://solr.apache.org/guide/8_9/learning-to-rank.html
    このトピックについて多くのブログを書いています:
    https://sease.io/category/learning-to-rank
    https://sease.io/2016/10/apache-solr-learning-to-rank-better-part-4.html
    さらに、専用のトレーニングも行っています:
    https://sease.io/training/learning-to-rank-training

  5. サブセカンドのクエリ
    一般的に、複雑なランキングモデルや一致アルゴリズムを統合しても、1秒未満になります。
    一致およびランキングアルゴリズムが複雑になればなるほど、遅くなりますが、一般的にApache Solrは非常に高速で問題は発生しません。

  6. 新しいデータのリアルタイム(またはほぼリアルタイム)のインデックス作成
    ソフトコミット(数年前に導入されました)以降、Apache Solrはかなり優れています。
    https://solr.apache.org/guide/8_9/updatehandlers-in-solrconfig.html
    https://lucidworks.com/post/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/

  7. 簡単にスケーラブル
    これは十分に対応されています:
    https://solr.apache.org/guide/8_9/solrcloud.html

幸運を祈ります!

Alessandro Benedetti
Apache Lucene/Solr コミッター
ディレクター, R&D ソフトウェアエンジニア, 検索コンサルタント

返信投稿者:ks-solruserml-bot (2024/06/09 20:37 投稿)

とても詳細な回答と時間を割いていただき、ありがとうございます。
今後読むものがたくさんありますね!
このような素晴らしいコミュニティサポートがあることは本当に嬉しいです。本当にありがとうございます!

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?