選擇性搜尋是一個用於大規模文字搜尋的分散式資訊檢索(DIR)項目,其中根據文檔語料庫相似性將文檔集合劃分為子集(稱為分片),從而能夠跨更少的分片而不是所有分片進行搜尋。
該計畫的目標是在不影響搜尋品質的情況下實現一個高效、有效的分散式搜尋系統,旨在降低搜尋成本。
在Kulkarni 等人的出版物中,根據記錄內容相似性將大規模集合分解為子單元的方法被稱為“基於主題的分區”,並且針對給定搜索查詢僅搜索較少的相關分片被稱為「選擇性搜尋」等人。
選擇性搜尋是用 Scala 編程的。它擴展了用於無監督叢集和分散式運算的 Apache Spark MLLib 庫、用於搜尋和資訊檢索的 Apache Solr 庫。
Java JDK 8 版本“1.8.0_131”
斯卡拉2.12.2
Apache Spark 版本 2.1.1
阿帕契solr 6.6.2
Spark-Solr 3.3.0
阿帕契Maven 3.5.0
阿帕契常春藤 2.4.0
Apache ANT 版本 1.10.1
要編譯目前版本的選擇性搜索,您需要在您的電腦上執行以下軟體清單。
為了驗證上面列出的軟體是否在您的電腦上運行,請使用以下命令進行確認。
java -version
scala -version
mvn -version
驗證所需軟體設定後,下載原始碼並執行以下命令。
mvn clean install -DskipTests
要在本機主機(電腦)上執行選擇性搜尋項目,需要設定 Apache SolrCloud。如果您尚未配置,請按照此處提供的說明進行操作:()
SolrCloud 設定完成後,有兩種方法可以運行選擇性搜索,要么在 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 解壓縮目錄所在的路徑。
以雲端模式啟動solr
./bin/solr start -c -m 4g
一旦 solr 以歡迎訊息「快樂搜尋!」開始,您應該可以連接到其管理 UI http://localhost:8983/solr/#/
http://localhost:8983/solr/#/~collections
透過提供集合名稱來新增集合,選擇配置集,它應該是 data_driven_schema_configs。其他鍵值對輸入如螢幕截圖所示:按一下此處
透過導航到雲端管理 ui http://localhost:8983/solr/#/~cloud
確認集合是否已成功創建,您應該可以看到新建立的集合
建立集合的另一種方法是透過命令列。範例指令./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
連接到 Banana 儀表板按照下面列出的步驟執行(運行)任何其他(自訂/特定)資料集的選擇性搜尋。
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]