私は当初、elasticsearch メーリング リスト ( https://groups.google.com/forum/?fromgroups=#!topic/elasticsearch/BZLFJSEpl78 )に同様の投稿を投稿しようとしましたが、役立つ応答が得られなかったので、スタック オーバーフローを試してみてください。これは SO に関する私の最初の投稿なので、意図した型に完全に適合しない場合は申し訳ありません。
私は現在、ある大学と協力して、彼らが実施しているいくつかの研究をさらに洗練するためのテスト スイートの実装を支援しています。彼らの研究は、動的スキーマ検索に基づいています。さまざまなオープンソースの検索ソリューションを評価するのに時間を費やした後、elasticsearch をベース プラットフォームとして決定しました。私はelasticsearchのドキュメントとコード自体を調べ、Luceneのドキュメントも読むのに約1週間費やしましたが、明確な道筋を見つけるのに苦労しています.
このプロジェクトの目標は、研究者に、検索アルゴリズムのリビジョンをプラグインしてテストおよび改良するために使用できるソフトウェアを提供することです。彼らは、Groovy、Python、Closure などの JVM でサポートされている Java 以外の言語でプラグ可能なアルゴリズムを記述できるようにしたいと考えていますが、それは難しい要件ではありません。その一環として、クエリを実行して出力を表示するためのフロント エンドと、ドキュメントをインデックスに追加するための管理インターフェイスを提供します。非常に強力で完全な REST API のおかげで、これらすべてに満足しています。よくわからないのは、プラグ可能な検索アルゴリズムの実装をどのように進めるかです。
研究者のアルゴリズムが機能するには、次の 4 つの入力が必要です。
- クエリ用語。
- インデックス全体の単語 (用語) x ドキュメント マトリックス。
- インデックス全体のドキュメント x ワード (用語) マトリックス。
- インデックス全体の単語 (用語) 頻度リスト。これは、インデックス全体で各単語が出現する回数です。
その目的上、ドキュメントは実際の実際のドキュメントには対応していません (実際にはテキスト イベントと呼んでいます)。むしろ、今のところ、それは 1 つの文に対応しています (構成可能であることも役立つかもしれません)。これを処理する最善の方法は、ドキュメントを文に分割し (Apache Tika などを使用)、各文を独自のドキュメントとしてインデックスに入れることだと思います。mapper-attachement プラグインを出発点として使用して、私が提供する管理 UI でこれを行うことができると確信しています。欠点は、elasticsearch に渡す前にドキュメントを分割することは、あまり構成可能な方法ではないことです。解像度をアルゴリズムに変更したい場合は、すべてのドキュメントをインデックスに再度追加する必要があります。インデックスがその完全なドキュメントをそのまま保存し、検索アルゴリズムがクエリごとにどの解像度で動作するかを選択できる場合、それは完璧です. それが可能かどうかはわかりませんが。
次の問題は、必要な 3 つの入力を取得して、プラグ可能な検索アルゴリズムに渡す方法です。私はこれをどこから始めるべきか本当に苦労しています。Luecene を見ると、独自の検索/クエリの実装を提供する必要があるように見えますが、これが正しいかどうかはわかりません。また、elasticsearch サイトには検索プラグインがリストされていないように見えるので、それが可能かどうかさえわかりません。ここで重要なことは、アルゴリズムは、スキーマを使用してインデックス内の各ドキュメントをスコアリングする前に、スキーマを生成するために使用できるクエリ用語を使用してインデックス レベルで動作する必要があるということです。私が知る限り、elasticsearch が提供するスクリプト インターフェイスは役に立たないということです。Elasticsearch ガイドのスクリプト インターフェイスの説明は、スクリプトがインデックス レベルではなくドキュメント レベルで動作するように聞こえます。その他の懸念/考慮事項は、このアルゴリズムをさまざまな言語でプログラミングする機能 (スクリプト インターフェイスと同様) と、REST API によって返された検索を拡張して、アルゴリズムが生成したスキーマを含める機能です (これは、独自の REST エンドポイントを定義する必要があります)。
ここから始めるべきことについて誰かアドバイスをもらえますか? コアアルゴリズムとしてスクリプトを受け入れることができる独自の検索プラグインを作成する必要があるようです。プラグインは、制御をスクリプトに渡す前に、前に概説した 4 つの入力を整理する役割を果たします。また、スクリプトから出力を取得し、それを独自の REST API 経由で返します。これは論理的に思えますか?もしそうなら、どうすればこれを始められますか? コードのどの部分を見る必要がありますか?