A pesquisa seletiva é um projeto de recuperação de informações distribuídas (DIR) para pesquisa de texto em grande escala, no qual a coleção de documentos é particionada em subconjuntos (conhecidos como fragmentos) com base na similaridade do corpus de documentos, permitindo assim a pesquisa em menos fragmentos em vez de todos os fragmentos.
O objetivo do projeto é implementar um sistema de busca distribuída eficiente e eficaz sem afetar a qualidade da busca e visando reduzir o custo da busca.
A metodologia de decomposição de uma coleção em grande escala em subunidades com base na similaridade do conteúdo de seus registros é denominada “Particionamento Baseado em Tópico”, e a pesquisa em apenas menos fragmentos relevantes para determinada consulta de pesquisa é denominada “Pesquisa Seletiva” em uma publicação de Kulkarni et. al.
A Pesquisa Seletiva é programada em Scala. Ele estende bibliotecas do Apache Spark MLLib para clustering não supervisionado e computação distribuída, bibliotecas Apache Solr para pesquisa e recuperação de informações.
Java JDK 8 versão "1.8.0_131"
Escala 2.12.2
Apache Spark versão 2.1.1
Apache Solr 6.6.2
Spark-Solr 3.3.0
ApacheMaven3.5.0
Apache Ivy2.4.0
Apache ANT versão 1.10.1
Para compilar a versão atual da pesquisa seletiva, você precisará ter a seguinte lista de softwares em execução em sua máquina.
Para verificar se os softwares listados acima estão sendo executados em sua máquina, confirme com os comandos abaixo.
java -version
scala -version
mvn -version
Após a verificação da configuração dos softwares necessários, baixe o código-fonte e execute o comando abaixo.
mvn clean install -DskipTests
Para executar o projeto de pesquisa seletiva em localhost (máquina), é necessário que o Apache SolrCloud esteja configurado. Se você ainda não o configurou, siga as instruções fornecidas aqui: ()
Após a configuração do SolrCloud, há duas maneiras de executar a pesquisa seletiva: configurá-la em um IDE - pode ser IntelliJ/Eclipse ou iniciar um Spark Cluster e executar o trabalho nele.
git clone https://github.com/rajanim/selective-search.git
App.scala
, clique com o botão direito e execute. Deve imprimir 'Hello World!' Isso confirma que o código scala foi compilado e executado com sucesso.TestTextFileParser.scala
, modifique o caminho raiz de acordo com as configurações do diretório, execute os casos de teste (clique com o botão direito e escolha a opção de execução)org.sfsu.cs.io.newsgroup.NewsgroupRunner.scala
, modifique o caminho do diretório de entrada para o caminho do diretório da máquina local e execute.Configure o Spark Cluster no host local.
spark-2.0.0-bin-hadoop2.7
)cd /Users/user_name/softwares/spark-2.0.0-bin-hadoop2.7
./sbin/start-master.sh
crie o arquivo spark-env.sh usando o modelo fornecido: cp ./conf/spark-env.sh.template ./conf/spark-env.sh
anexe um parâmetro de configuração ao final do arquivo: 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]
Execute o projeto de pesquisa seletiva no cluster 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 &
Baixe o Apache Solr como zip (a implementação atual é executada no solr 6.2.1)
Acesse o terminal e navegue até o caminho onde o diretório de descompactação do solr está localizado.
Inicie o solr no modo nuvem
./bin/solr start -c -m 4g
Depois de iniciar o solr com a mensagem de boas-vindas como 'Boa pesquisa!', você poderá se conectar à interface do administrador http://localhost:8983/solr/#/
, navegar até as coleções: http://localhost:8983/solr/#/~collections
Adicione uma coleção fornecendo um nome de coleção, escolha o conjunto de configurações, deve ser data_driven_schema_configs. Outras entradas de pares de valores-chave, conforme visto aqui na captura de tela: clique aqui
Confirme se a coleção foi criada com sucesso navegando até a interface do usuário do administrador da nuvem http://localhost:8983/solr/#/~cloud
e você poderá ver a coleção recém-criada
Outra abordagem para criar uma coleção é via linha de comando. Comando de exemplo ./bin/solr create_collection -n data_driven_schema_configs -c collection_name -p portNumber -shards numShards
Para Selective Search
, exigimos uma coleção solr com estratégia de 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
Siga as etapas listadas abaixo para executar (executar) pesquisa seletiva para qualquer outro conjunto de dados (personalizado/específico).
org.sfsu.cs.main.SparkInstance
e invocando o método createSparkContext
val sc = sparkInstance.createSparkContext("class name")
org.sfsu.cs.io.text.TextFileParser.scala
para obter documentos de texto mapeados para org.sfsu.cs.document.TFDocument
org.sfsu.cs.io.clueweb09
org.sfsu.cs.io.csv
Configurações necessárias
Afinação
"spark.driver.maxResultSize=2000"
e não pode exceder 2048./bin/solr start -c -m 4g
https://issues.apache.org/jira/browse/SOLR-4114
Correção: certifique-se de que maxShardsPerNode
seja igual a numShards
com base no número de nós disponíveis. Se você tiver dúvidas adicionais relacionadas à implementação, resultados experimentais, benchmarks ou uso da Selective-Search
, ficaremos felizes em ajudar. Envie um e-mail para [email protected]