選択的検索は、大規模なテキスト検索のための分散情報検索 (DIR) プロジェクトです。このプロジェクトでは、ドキュメントのコーパスの類似性に基づいてドキュメントのコレクションがサブセット (シャードと呼ばれる) に分割され、すべてのシャードではなく少数のシャードにわたる検索が可能になります。
プロジェクトの目標は、検索品質に影響を与えることなく効率的かつ効果的な分散検索システムを実装し、検索コストの削減を目指すことです。
Kulkarniらの出版物では、大規模なコレクションをそのレコード内容の類似性に基づいてサブユニットに分解する方法論を「トピックベースのパーティショニング」と呼び、指定された検索クエリに対してより少数の関連シャードのみを検索することを「選択的検索」と呼んでいます。アル。
選択的検索は Scala でプログラムされています。これは、教師なしクラスタリングと分散コンピューティング用の Apache Spark MLLib ライブラリ、検索と情報取得用の Apache Solr ライブラリを拡張します。
Java JDK 8 バージョン「1.8.0_131」
スカラ 2.12.2
Apache Spark バージョン 2.1.1
Apache ソルル 6.6.2
Spark-Solr 3.3.0
Apache Maven 3.5.0
アパッチ アイビー 2.4.0
Apache ANT バージョン 1.10.1
現在のバージョンの selective-search をコンパイルするには、次のソフトウェアのリストがマシン上で実行されている必要があります。
上記のソフトウェアがマシン上で実行されていることを確認するには、以下のコマンドを使用して確認します。
java -version
scala -version
mvn -version
必要なソフトウェアのセットアップを確認した後、ソースコードをダウンロードし、以下のコマンドを実行します。
mvn clean install -DskipTests
localhost(machine)上で選択検索プロジェクトを実行するには、Apache SolrCloudが設定されている必要があります。まだ構成していない場合は、ここに記載されている手順に従ってください: ()
SolrCloud のセットアップ後、選択検索を実行するには 2 つの方法があります。IDE 上でセットアップするか、IntelliJ/Eclipse を使用するか、Spark クラスターを起動してジョブを実行します。
git clone https://github.com/rajanim/selective-search.git
App.scala
に移動し、右クリックして実行します。 「Hello World!」と出力されるはずです。これにより、scala コードがコンパイルされ、正常に実行されることが確認されます。TestTextFileParser.scala
に移動し、ディレクトリ設定に従ってルート パスを変更し、テスト ケースを実行します (右クリックして実行オプションを選択します)。org.sfsu.cs.io.newsgroup.NewsgroupRunner.scala
に移動し、入力ディレクトリ パスをローカル マシンのディレクトリ パスに変更して実行します。ローカルホスト上で Spark クラスターを構成します。
spark-2.0.0-bin-hadoop2.7
で実行されます)cd /Users/user_name/softwares/spark-2.0.0-bin-hadoop2.7
となります。./sbin/start-master.sh
提供されたテンプレートを使用して、spark-env.sh ファイルを作成します: cp ./conf/spark-env.sh.template ./conf/spark-env.sh
ファイルの最後に設定パラメータを追加します: echo "export SPARK_WORKER_INSTANCES=4" >> ./conf/spark-env.sh
./sbin/start-slaves.sh <master_url> [master url: available or seen on spark web-ui after master is started, at: localhost:8080]
Spark クラスターで選択的検索プロジェクトを実行します。 nohup ./bin/spark-submit --master spark://RajaniM-1159:7077 --num-executors 2 --executor-memory 8g --driver-memory 12g --conf "spark.rpc.message.maxSize=2000" --conf "spark.driver.maxResultSize=2000" --class com.sfsu.cs.main.TopicalShardsCreator /Users/rajanishivarajmaski/selective-search/target/selective-search-1.0-SNAPSHOT.jar TopicalShardsCreator -zkHost localhost:9983 -collection word-count -warcFilesPath /Users/rajani.maski/rm/cluweb_catb_part/ -dictionaryLocation /Users/rajani.maski/rm/spark-solr-899/ -numFeatures 25000 -numClusters 50 -numPartitions 50 -numIterations 30 &
Apache Solr を zip としてダウンロードします (現在の実装は solr 6.2.1 で実行されます)
ターミナルに移動し、solr unzip ディレクトリがあるパスに移動します。
クラウドモードでsolrを起動する
./bin/solr start -c -m 4g
「検索をお楽しみください!」というウェルカム メッセージで solr を開始すると、管理 UI http://localhost:8983/solr/#/
に接続し、コレクションhttp://localhost:8983/solr/#/~collections
に移動できるようになります。 http://localhost:8983/solr/#/~collections
コレクション名を指定してコレクションを追加し、構成セットを選択します。これは data_driven_schema_configs である必要があります。スクリーンショットに示されているその他のキーと値のペアの入力: ここをクリックしてください
クラウド管理 UI http://localhost:8983/solr/#/~cloud
に移動して、コレクションが正常に作成されたかどうかを確認します。新しく作成されたコレクションが表示されるはずです。
コレクションを作成するもう 1 つの方法は、コマンド ラインを使用することです。コマンド例./bin/solr create_collection -n data_driven_schema_configs -c collection_name -p portNumber -shards numShards
Selective Search
の場合、 implicit routing
戦略を備えた solr コレクションが必要です。
http://localhost:8983/solr/admin/collections?action=CREATE&name=NewsGroupImplicit&numShards=20&replicationFactor=1&maxShardsPerNode=20&router.name=implicit&shards=shard1,shard2,shard3,shard4,shard5,shard6,shard7,shard8,shard9,shard10,shard11,shard12,shard13,shard14,shard15,shard16,shard17,shard18,shard19,shard20&collection.configName=data_driven_schema_configs&router.field=_route_
http://localhost:8983/solr/banana/src/index.html#/dashboard
経由でバナナ ダッシュボードに接続します。 他の (カスタム/特定の) データセットの選択的検索を実行するには、以下の手順に従ってください。
org.sfsu.cs.main.SparkInstance
を作成し、 createSparkContext
メソッドを呼び出して、Spark コンテキストを取得しますval sc = sparkInstance.createSparkContext("class name")
org.sfsu.cs.io.text.TextFileParser.scala
で利用可能なテキスト パーサー API を利用して、 org.sfsu.cs.document.TFDocument
にマップされたテキスト ドキュメントを取得します。org.sfsu.cs.io.clueweb09
で利用可能なパーサーを利用します。org.sfsu.cs.io.csv
で利用可能なパーサー API を利用します。 必要な構成
チューニング
"spark.driver.maxResultSize=2000"
を渡すことで増加できますが、2048 を超えることはできません。./bin/solr start -c -m 4g
https://issues.apache.org/jira/browse/SOLR-4114
修正: maxShardsPerNode
が数に基づいてnumShards
と等しいことを確認してください。利用可能なノード。 実装、実験結果、ベンチマーク、またはSelective-Search
の使用法に関連する追加の質問がある場合は、喜んでお手伝いします。 [email protected] までメールしてください。