选择性搜索是一个用于大规模文本搜索的分布式信息检索(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]