Die selektive Suche ist ein DIR-Projekt (Distributed Information Retrieval) für die Textsuche in großem Maßstab, bei dem Dokumentensammlungen basierend auf der Ähnlichkeit des Dokumentenkorpus in Teilmengen (sogenannte Shards) unterteilt werden, wodurch die Suche über weniger Shards statt über alle Shards ermöglicht wird.
Ziel des Projekts ist die Implementierung eines effizienten und effektiven verteilten Suchsystems ohne Beeinträchtigung der Suchqualität und mit dem Ziel, die Suchkosten zu senken.
Die Methode zur Zerlegung einer großen Sammlung in Untereinheiten basierend auf der Ähnlichkeit des Datensatzinhalts wird als „Topic Based Partitioning“ bezeichnet. Die Suche über nur weniger relevante Shards für eine bestimmte Suchanfrage wird in einer Veröffentlichung von Kulkarni et al. als „Selective Search“ bezeichnet al.
Die selektive Suche ist in Scala programmiert. Es erweitert die Bibliotheken von Apache Spark MLLib für unbeaufsichtigtes Clustering und verteiltes Computing sowie die Apache Solr-Bibliotheken für Suche und Informationsabruf.
Java JDK 8-Version „1.8.0_131“
Scala 2.12.2
Apache Spark-Version 2.1.1
Apache Solr 6.6.2
Spark-Solr 3.3.0
Apache Maven 3.5.0
Apache Ivy 2.4.0
Apache ANT-Version 1.10.1
Um die aktuelle Version der selektiven Suche zu kompilieren, muss die folgende Liste von Software auf Ihrem Computer ausgeführt werden.
Um zu überprüfen, ob die oben aufgeführten Softwareprogramme auf Ihrem Computer ausgeführt werden, bestätigen Sie dies mit den folgenden Befehlen.
java -version
scala -version
mvn -version
Nachdem Sie die erforderliche Softwareeinrichtung überprüft haben, laden Sie den Quellcode herunter und führen Sie den folgenden Befehl aus.
mvn clean install -DskipTests
Um das selektive Suchprojekt auf localhost (Maschine) auszuführen, muss Apache SolrCloud konfiguriert sein. Wenn Sie es noch nicht konfiguriert haben, folgen Sie den Anweisungen hier: ()
Nach der SolrCloud-Einrichtung gibt es zwei Möglichkeiten, die selektive Suche auszuführen: Sie können sie entweder auf einer IDE einrichten – entweder IntelliJ/Eclipse oder einen Spark-Cluster starten und einen Job darauf ausführen.
git clone https://github.com/rajanim/selective-search.git
herunter oder klonen Sie esApp.scala
, klicken Sie mit der rechten Maustaste und führen Sie sie aus. Es sollte „Hello World!“ lauten. Dies bestätigt, dass Scala-Code kompiliert wurde und erfolgreich ausgeführt wird.TestTextFileParser.scala
, ändern Sie den Stammpfad gemäß Ihren Verzeichniseinstellungen und führen Sie die Testfälle aus (klicken Sie mit der rechten Maustaste und wählen Sie die Option „Ausführen“).org.sfsu.cs.io.newsgroup.NewsgroupRunner.scala
, ändern Sie den Eingabeverzeichnispfad in den Verzeichnispfad Ihres lokalen Computers und führen Sie ihn aus.Konfigurieren Sie den Spark-Cluster auf localhost.
spark-2.0.0-bin-hadoop2.7
)cd /Users/user_name/softwares/spark-2.0.0-bin-hadoop2.7
./sbin/start-master.sh
Erstellen Sie die Datei spark-env.sh mit der bereitgestellten Vorlage: cp ./conf/spark-env.sh.template ./conf/spark-env.sh
Hängen Sie einen Konfigurationsparameter an das Ende der Datei an: 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]
Führen Sie das selektive Suchprojekt auf dem Spark-Cluster aus. 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 &
Laden Sie Apache Solr als Zip herunter (aktuelle Implementierung läuft auf Solr 6.2.1)
Gehen Sie zum Terminal und navigieren Sie zu dem Pfad, in dem sich das Solr-Unzip-Verzeichnis befindet.
Starten Sie Solr im Cloud-Modus
./bin/solr start -c -m 4g
Sobald Sie Solr mit der Begrüßungsnachricht „Happy Searching!“ gestartet haben, sollten Sie in der Lage sein, eine Verbindung zur Admin-Benutzeroberfläche http://localhost:8983/solr/#/
und zu den Sammlungen zu navigieren: http://localhost:8983/solr/#/~collections
Fügen Sie eine Sammlung hinzu, indem Sie einen Sammlungsnamen angeben, wählen Sie den Konfigurationssatz aus, dieser sollte data_driven_schema_configs lauten. Weitere Schlüssel-Wert-Paar-Eingaben, wie hier im Screenshot zu sehen: Klicken Sie hier
Bestätigen Sie, ob die Sammlung erfolgreich erstellt wurde, indem Sie zur Cloud-Administrator-Benutzeroberfläche http://localhost:8983/solr/#/~cloud
navigieren. Sie sollten die neu erstellte Sammlung sehen können
Ein anderer Ansatz zum Erstellen einer Sammlung ist die Befehlszeile. Beispielbefehl ./bin/solr create_collection -n data_driven_schema_configs -c collection_name -p portNumber -shards numShards
Für Selective Search
benötigen wir eine Solr-Sammlung mit implicit routing
Strategie.
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
eine Verbindung zum Banana-Dashboard her Befolgen Sie die unten aufgeführten Schritte, um die selektive Suche nach einem anderen (benutzerdefinierten/spezifischen) Datensatz auszuführen.
org.sfsu.cs.main.SparkInstance
erstellen und die Methode createSparkContext
“ aufrufen val sc = sparkInstance.createSparkContext("class name")
org.sfsu.cs.io.text.TextFileParser.scala
verfügbaren Textparser-APIs, um Textdokumente zu erhalten, die org.sfsu.cs.document.TFDocument
zugeordnet sindorg.sfsu.cs.io.clueweb09
verfügbar istorg.sfsu.cs.io.csv
verfügbar sind Erforderliche Konfigurationen
Abstimmung
"spark.driver.maxResultSize=2000"
erhöht werden. Sie darf 2048 nicht überschreiten./bin/solr start -c -m 4g
https://issues.apache.org/jira/browse/SOLR-4114
Lösung: Stellen Sie sicher, dass maxShardsPerNode
“ basierend auf der Anzahl von numShards
“ entspricht Knoten verfügbar. Wenn Sie weitere Fragen zur Implementierung, zu experimentellen Ergebnissen, zu Benchmarks oder zur Verwendung von Selective-Search
haben, helfen wir Ihnen gerne weiter. Bitte senden Sie eine E-Mail an [email protected]