La búsqueda selectiva es un proyecto de recuperación de información distribuida (DIR) para la búsqueda de texto a gran escala en el que una colección de documentos se divide en subconjuntos (conocidos como fragmentos) en función de la similitud del corpus de documentos, lo que permite la búsqueda en menos fragmentos en lugar de en todos.
El objetivo del proyecto es implementar un sistema de búsqueda distribuida eficiente y eficaz sin afectar la calidad de la búsqueda y con el objetivo de reducir el costo de la búsqueda.
La metodología de descomponer una colección a gran escala en subunidades en función de la similitud del contenido de sus registros se denomina "particionamiento basado en temas", y la búsqueda en solo un menor número de fragmentos relevantes para una consulta de búsqueda determinada se denomina "búsqueda selectiva" en una publicación de Kulkarni et al. Alabama.
La búsqueda selectiva está programada en Scala. Amplía las bibliotecas de Apache Spark MLLib para agrupación en clústeres no supervisados y computación distribuida, y las bibliotecas de Apache Solr para búsqueda y recuperación de información.
Java JDK 8 versión "1.8.0_131"
Escala 2.12.2
Apache Spark versión 2.1.1
Apache solr 6.6.2
Spark-Solr 3.3.0
ApacheMaven 3.5.0
Hiedra Apache 2.4.0
Apache ANT versión 1.10.1
Para compilar la versión actual de la búsqueda selectiva, necesitará tener la siguiente lista de software ejecutándose en su máquina.
Para verificar que los softwares enumerados anteriormente se estén ejecutando en su máquina, confirme con los comandos a continuación.
java -version
scala -version
mvn -version
Después de verificar la configuración del software requerido, descargue el código fuente y ejecute el siguiente comando.
mvn clean install -DskipTests
Para ejecutar el proyecto de búsqueda selectiva en localhost (máquina), es necesario configurar Apache SolrCloud. Si aún no lo tiene configurado, siga las instrucciones proporcionadas aquí: ()
Después de la configuración de SolrCloud, hay dos formas de ejecutar la búsqueda selectiva: configurarla en un IDE (podría ser IntelliJ/Eclipse o iniciar un Spark Cluster y ejecutar el trabajo en él).
git clone https://github.com/rajanim/selective-search.git
App.scala
, haga clic derecho y ejecute. Debería imprimir '¡Hola mundo!' Esto confirma que el código Scala está compilado y ejecutándose correctamente.TestTextFileParser.scala
, modifique la ruta raíz según la configuración de su directorio, ejecute los casos de prueba (haga clic derecho y elija la opción ejecutar)org.sfsu.cs.io.newsgroup.NewsgroupRunner.scala
, modifique la ruta del directorio de entrada a la ruta del directorio de su máquina local y ejecute.Configure Spark Cluster en localhost.
spark-2.0.0-bin-hadoop2.7
)cd /Users/user_name/softwares/spark-2.0.0-bin-hadoop2.7
./sbin/start-master.sh
cree el archivo spark-env.sh usando la plantilla proporcionada: cp ./conf/spark-env.sh.template ./conf/spark-env.sh
agregue un parámetro de configuración al final del archivo: 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]
Ejecute el proyecto de búsqueda selectiva en Spark Cluster. 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 &
Descargue Apache Solr como zip (la implementación actual se ejecuta en solr 6.2.1)
Llegué a la terminal y navegué hasta la ruta donde se encuentra el directorio de descompresión de solr.
Inicie solr en modo nube
./bin/solr start -c -m 4g
Una vez que haya comenzado con el mensaje de bienvenida "¡Feliz búsqueda!", debería poder conectarse a su interfaz de usuario de administrador http://localhost:8983/solr/#/
, navegar a las colecciones: http://localhost:8983/solr/#/~collections
Agregue una colección dándole un nombre de colección, elija el conjunto de configuración, debe ser data_driven_schema_configs. Otras entradas de pares clave-valor como se ven aquí en la captura de pantalla: haga clic aquí
Confirme si la colección se creó correctamente navegando a la interfaz de usuario de administración de la nube http://localhost:8983/solr/#/~cloud
y debería poder ver la colección recién creada.
Otro método para crear una colección es mediante la línea de comando. Comando de ejemplo ./bin/solr create_collection -n data_driven_schema_configs -c collection_name -p portNumber -shards numShards
Para Selective Search
, requerimos una colección solr con una estrategia 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 los pasos que se enumeran a continuación para ejecutar una búsqueda selectiva de cualquier otro conjunto de datos (personalizado/específico).
org.sfsu.cs.main.SparkInstance
e invocando el método createSparkContext
val sc = sparkInstance.createSparkContext("class name")
org.sfsu.cs.io.text.TextFileParser.scala
para obtener documentos de texto asignados a org.sfsu.cs.document.TFDocument
org.sfsu.cs.io.clueweb09
org.sfsu.cs.io.csv
Configuraciones requeridas
Sintonización
"spark.driver.maxResultSize=2000"
no puede exceder 2048./bin/solr start -c -m 4g
https://issues.apache.org/jira/browse/SOLR-4114
Solución: asegúrese de que maxShardsPerNode
sea igual a numShards
según el número de Nodos disponibles. Si tiene preguntas adicionales relacionadas con la implementación, los resultados experimentales, los puntos de referencia o el uso de Selective-Search
, estaremos encantados de ayudarle. Envíe un correo electrónico a [email protected]