การค้นหาแบบเลือกสรรเป็นโครงการ Distributed Information Recovery (DIR) สำหรับการค้นหาข้อความขนาดใหญ่ โดยคอลเลกชันของเอกสารจะถูกแบ่งพาร์ติชันออกเป็นชุดย่อย (เรียกว่าชาร์ด) โดยยึดตามความคล้ายคลึงกันของคลังเอกสาร ซึ่งช่วยให้สามารถค้นหาข้ามชาร์ดน้อยลงแทนที่จะค้นหาชาร์ดทั้งหมด
เป้าหมายของโครงการคือการใช้ระบบการค้นหาแบบกระจายที่มีประสิทธิภาพและประสิทธิผล โดยไม่ส่งผลกระทบต่อคุณภาพการค้นหา และมีเป้าหมายที่จะลดต้นทุนการค้นหา
วิธีการแยกย่อยคอลเลกชันขนาดใหญ่ออกเป็นหน่วยย่อยตามความคล้ายคลึงกันของเนื้อหาในบันทึกนั้นเรียกว่า "การแบ่งพาร์ติชันตามหัวข้อ" และการค้นหาในส่วนแบ่งข้อมูลที่เกี่ยวข้องเพียงไม่กี่รายการสำหรับคำค้นหาที่กำหนดนั้นเรียกว่า "การค้นหาแบบเลือกสรร" ในสิ่งพิมพ์โดย Kulkarni et อัล
Selective Search ได้รับการตั้งโปรแกรมไว้ใน Scala โดยขยายไลบรารีของ Apache Spark MLLib สำหรับการทำคลัสเตอร์แบบไม่มีผู้ดูแลและการประมวลผลแบบกระจาย, ไลบรารี Apache Solr สำหรับการค้นหาและการดึงข้อมูล
Java JDK 8 เวอร์ชัน "1.8.0_131"
สกาล่า 2.12.2
อาปาเช่ สปาร์ค เวอร์ชัน 2.1.1
อาปาเช่ โซล 6.6.2
Spark-Solr 3.3.0
อาปาเช่ มาเวน 3.5.0
อาปาเช่ ไอวี่ 2.4.0
อาปาเช่ ANT เวอร์ชัน 1.10.1
เพื่อคอมไพล์เวอร์ชันปัจจุบันของการค้นหาแบบเลือกสรร คุณจะต้องมีรายการซอฟต์แวร์ต่อไปนี้ที่ทำงานอยู่บนเครื่องของคุณ
เพื่อตรวจสอบว่าซอฟต์แวร์ที่ระบุไว้ข้างต้นทำงานบนเครื่องของคุณ ให้ยืนยันด้วยคำสั่งด้านล่าง
java -version
scala -version
mvn -version
หลังจากตรวจสอบการตั้งค่าซอฟต์แวร์ที่จำเป็นแล้ว ให้ดาวน์โหลดซอร์สโค้ดและดำเนินการคำสั่งด้านล่าง
mvn clean install -DskipTests
ในการรันโปรเจ็กต์การค้นหาแบบเลือกบน localhost (เครื่องจักร) จำเป็นต้องกำหนดค่า Apache SolrCloud หากคุณยังไม่ได้กำหนดค่า ให้ทำตามคำแนะนำที่ให้ไว้ที่นี่: ()
หลังจากการตั้งค่า SolrCloud มีสองวิธีในการเรียกใช้การค้นหาแบบเลือกสรร ไม่ว่าจะตั้งค่าบน IDE ซึ่งอาจเป็น IntelliJ/Eclipse หรือเปิดใช้ Spark Cluster และดำเนินการงานกับคลัสเตอร์นั้น
git clone https://github.com/rajanim/selective-search.git
App.scala
คลิกขวาแล้วเรียกใช้ ควรพิมพ์ว่า 'Hello World!' นี่เป็นการยืนยันว่าโค้ดสกาล่าได้รับการคอมไพล์และทำงานได้สำเร็จTestTextFileParser.scala
แก้ไขพาธรูทตามการตั้งค่าไดเร็กทอรีของคุณ รันกรณีทดสอบ (คลิกขวาและเลือกตัวเลือกเรียกใช้)org.sfsu.cs.io.newsgroup.NewsgroupRunner.scala
แก้ไขเส้นทางไดเร็กทอรีอินพุตไปยังพาธไดเร็กทอรีของเครื่องในเครื่องของคุณ จากนั้นรันกำหนดค่า Spark Cluster บน localhost
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]
รันโปรเจ็กต์การค้นหาแบบเลือกสรรบนคลัสเตอร์ 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 &
ดาวน์โหลด Apache Solr เป็น zip (การใช้งานปัจจุบันทำงานบน solr 6.2.1)
ไปที่เทอร์มินัลแล้วนำทางไปยังเส้นทางที่มีไดเร็กทอรี solr unzip
เริ่ม solr ในโหมดคลาวด์
./bin/solr start -c -m 4g
เมื่อคุณ solr เริ่มต้นด้วยข้อความต้อนรับว่า 'Happy Searching!' คุณควรจะสามารถเชื่อมต่อกับ UI ผู้ดูแลระบบได้ http://localhost:8983/solr/#/
นำทางไปยังคอลเลกชัน: http://localhost:8983/solr/#/~collections
เพิ่มคอลเลกชันโดยตั้งชื่อคอลเลกชัน เลือกชุดการกำหนดค่า ซึ่งควรเป็น data_driven_schema_configs อินพุตคู่ค่าคีย์อื่นๆ ดังที่เห็นในภาพหน้าจอ : คลิกที่นี่
ยืนยันว่าคอลเลกชันถูกสร้างขึ้นสำเร็จหรือไม่โดยไปที่ cloud admin ui 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]