Выборочный поиск — это проект распределенного поиска информации (DIR) для крупномасштабного текстового поиска, в котором коллекция документов разбивается на подмножества (известные как сегменты) на основе сходства корпуса документов, что позволяет осуществлять поиск по меньшему количеству сегментов, а не по всем сегментам.
Цель проекта — внедрить эффективную и действенную распределенную поисковую систему без ущерба для качества поиска и с целью снижения стоимости поиска.
Методология разложения крупномасштабной коллекции на подразделы на основе сходства содержания ее записей называется «разделением на основе тем», а поиск только по меньшему количеству релевантных фрагментов для данного поискового запроса называется «выборочным поиском» в публикации Кулкарни и др. ал.
Выборочный поиск запрограммирован на Scala. Он расширяет библиотеки Apache Spark MLLib для неконтролируемой кластеризации и распределенных вычислений, библиотеки Apache Solr для поиска и извлечения информации.
Java JDK 8 версии «1.8.0_131»
Скала 2.12.2
Апач Спарк версии 2.1.1
Апач Солр 6.6.2
Искра-Солр 3.3.0
Апач Мавен 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]
Запустите проект выборочного поиска в искровом кластере. 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 с приветственным сообщением «Удачного поиска!», вы сможете подключиться к его пользовательскому интерфейсу администратора http://localhost:8983/solr/#/
и перейти к коллекциям: http://localhost:8983/solr/#/~collections
Добавьте коллекцию, указав имя коллекции, выберите набор конфигурации, это должен быть data_driven_schema_configs. Другие входные пары ключевых значений, как показано здесь на снимке экрана: нажмите здесь.
Подтвердите успешное создание коллекции, перейдя в интерфейс администратора облака http://localhost:8983/solr/#/~cloud
, и вы сможете увидеть вновь созданную коллекцию.
Другой подход к созданию коллекции — через командную строку. Пример команды ./bin/solr create_collection -n data_driven_schema_configs -c collection_name -p portNumber -shards numShards
Для Selective Search
нам требуется коллекция solr с implicit routing
.
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
val sc = sparkInstance.createSparkContext("class name")
org.sfsu.cs.io.text.TextFileParser.scala
для получения текстовых документов, сопоставленных с org.sfsu.cs.document.TFDocument
org.sfsu.cs.io.clueweb09
org.sfsu.cs.io.csv
Требуемые конфигурации
Тюнинг
"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].