La recherche sélective est un projet de recherche d'informations distribuées (DIR) pour la recherche de texte à grande échelle dans laquelle la collection de documents est partitionnée en sous-ensembles (appelés fragments) en fonction de la similarité du corpus de documents, permettant ainsi la recherche sur moins de fragments au lieu de tous les fragments.
L'objectif du projet est de mettre en œuvre un système de recherche distribué efficace et efficient sans affecter la qualité de la recherche et visant à réduire les coûts de recherche.
La méthodologie de décomposition d'une collection à grande échelle en sous-unités en fonction de la similarité du contenu de ses enregistrements est appelée « partitionnement basé sur des sujets », et la recherche sur un nombre réduit de fragments pertinents pour une requête de recherche donnée est appelée « recherche sélective » dans une publication de Kulkarni et al.
La recherche sélective est programmée en Scala. Il étend les bibliothèques d'Apache Spark MLLib pour le clustering non supervisé et l'informatique distribuée, ainsi que les bibliothèques Apache Solr pour la recherche et la récupération d'informations.
JavaJDK 8 version "1.8.0_131"
Échelle 2.12.2
Apache Spark version 2.1.1
Apache Solr 6.6.2
Spark-Solr 3.3.0
ApacheMaven 3.5.0
Apache Ivy2.4.0
Apache ANT version 1.10.1
Pour compiler la version actuelle de la recherche sélective, vous aurez besoin de la liste suivante de logiciels exécutés sur votre ordinateur.
Afin de vérifier que les logiciels répertoriés ci-dessus sont exécutés sur votre ordinateur, confirmez avec les commandes ci-dessous.
java -version
scala -version
mvn -version
Après avoir vérifié la configuration des logiciels requis, téléchargez le code source et exécutez la commande ci-dessous.
mvn clean install -DskipTests
Pour exécuter le projet de recherche sélective sur localhost (machine), il est nécessaire qu'Apache SolrCloud soit configuré. Si vous ne l'avez pas déjà configuré, suivez les instructions fournies ici : ()
Après la configuration de SolrCloud, il existe deux façons d'exécuter une recherche sélective, soit en la configurant sur un IDE : il peut s'agir d'IntelliJ/Eclipse, soit en lançant un Spark Cluster et en exécutant une tâche dessus.
git clone https://github.com/rajanim/selective-search.git
App.scala
, faites un clic droit et exécutez. Il devrait afficher « Hello World ! » Cela confirme que le code scala est compilé et exécuté avec succès.TestTextFileParser.scala
, modifiez le chemin racine selon les paramètres de votre répertoire, exécutez les cas de test (clic droit et choisissez l'option d'exécution)org.sfsu.cs.io.newsgroup.NewsgroupRunner.scala
, modifiez le chemin du répertoire d'entrée par le chemin du répertoire de votre machine locale, exécutez.Configurez Spark Cluster sur localhost.
spark-2.0.0-bin-hadoop2.7
)cd /Users/user_name/softwares/spark-2.0.0-bin-hadoop2.7
./sbin/start-master.sh
créez le fichier spark-env.sh en utilisant le modèle fourni : cp ./conf/spark-env.sh.template ./conf/spark-env.sh
ajoutez un paramètre de configuration à la fin du fichier : 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]
Exécutez le projet de recherche sélective sur le 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 &
Téléchargez Apache Solr au format zip (l'implémentation actuelle fonctionne sur solr 6.2.1)
Accédez au terminal et accédez au chemin où se trouve le répertoire solr unzip.
Démarrer Solr en mode cloud
./bin/solr start -c -m 4g
Une fois que vous avez démarré Solr avec le message de bienvenue « Bonne recherche ! », vous devriez pouvoir vous connecter à son interface utilisateur d'administration http://localhost:8983/solr/#/
, accéder aux collections : http://localhost:8983/solr/#/~collections
Ajoutez une collection en donnant un nom de collection, choisissez le jeu de configuration, il devrait s'agir de data_driven_schema_configs. Autres entrées de paires clé-valeur, comme indiqué ici dans la capture d'écran : cliquez ici
Confirmez si la collection est créée avec succès en accédant à l'interface utilisateur du cloud http://localhost:8983/solr/#/~cloud
et vous devriez pouvoir voir la collection nouvellement créée.
Une autre approche pour créer une collection consiste à utiliser la ligne de commande. Exemple de commande ./bin/solr create_collection -n data_driven_schema_configs -c collection_name -p portNumber -shards numShards
Pour Selective Search
, nous avons besoin d'une collection solr avec une stratégie 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
Suivez les étapes répertoriées ci-dessous pour exécuter (exécuter) une recherche sélective pour tout autre ensemble de données (personnalisé/spécifique).
org.sfsu.cs.main.SparkInstance
et en appelant la méthode createSparkContext
val sc = sparkInstance.createSparkContext("class name")
org.sfsu.cs.io.text.TextFileParser.scala
pour obtenir des documents texte mappés sur org.sfsu.cs.document.TFDocument
org.sfsu.cs.io.clueweb09
org.sfsu.cs.io.csv
Configurations requises
Réglage
"spark.driver.maxResultSize=2000"
il ne peut pas dépasser 2048./bin/solr start -c -m 4g
https://issues.apache.org/jira/browse/SOLR-4114
Correctif : assurez-vous que maxShardsPerNode
est égal à numShards
en fonction du nombre de nœuds disponibles. Si vous avez des questions supplémentaires concernant la mise en œuvre, les résultats expérimentaux, les tests de référence ou l'utilisation de Selective-Search
, nous serons ravis de vous aider. Veuillez envoyer un e-mail à [email protected]