นอกเหนือจากการตอบแบบสอบถามของ OP ให้ฉันแสดงความคิดเห็นเชิงลึกเกี่ยวกับApache Solrจากการแนะนำเบื้องต้นไปจนถึงการติดตั้งและการใช้งานโดยละเอียด
คำแนะนำง่ายๆ
ทุกคนที่เคยมีประสบการณ์กับเครื่องมือค้นหาด้านบนหรือเครื่องมืออื่น ๆ ที่ไม่ได้อยู่ในรายชื่อ - ฉันชอบที่จะได้ยินความคิดเห็นของคุณ
ไม่ควรใช้Solrเพื่อแก้ปัญหาแบบเรียลไทม์ สำหรับเครื่องมือค้นหาSolrเป็นเกมสวยมากและทำงานได้อย่างไม่มีที่ติ
Solrทำงานได้ดีกับแอปพลิเคชันบนเว็บ High Traffic ( ฉันอ่านบางที่ไม่เหมาะกับสิ่งนี้ แต่ฉันสำรองข้อมูลคำสั่งนั้น ) มันใช้แรมไม่ใช่ซีพียู
- ความเกี่ยวข้องของผลลัพธ์และการจัดอันดับ
การเพิ่มประสิทธิภาพช่วยให้คุณจัดอันดับผลลัพธ์ของคุณปรากฏอยู่ด้านบน บอกว่าคุณกำลังพยายามที่จะค้นหาชื่อจอห์นในเขตFirstNameและนามสกุลและคุณต้องการที่จะให้ความเกี่ยวข้องกับFirstNameฟิลด์แล้วคุณจะต้องเพิ่มขึ้นFirstNameข้อมูลตามที่ปรากฏ
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
อย่างที่คุณเห็นฟิลด์ชื่อจะเพิ่มขึ้นด้วยคะแนน 2
เพิ่มเติมเกี่ยวกับSolrRelevancy
- การค้นหาและการจัดทำดัชนีความเร็ว
ความเร็วนั้นเร็วอย่างไม่น่าเชื่อและไม่ประนีประนอมกับสิ่งนั้น เหตุผลที่ผมย้ายไปSolr
เกี่ยวกับความเร็วการจัดทำดัชนีSolrยังสามารถจัดการJOINSจากตารางฐานข้อมูลของคุณ การเข้าร่วมที่สูงและซับซ้อนจะส่งผลต่อความเร็วในการจัดทำดัชนี อย่างไรก็ตามการกำหนดค่าRAMมหาศาลสามารถจัดการสถานการณ์นี้ได้อย่างง่ายดาย
ยิ่ง RAM สูงเท่าไรความเร็วในการจัดทำดัชนีของ Solr ก็จะเร็วขึ้นเท่านั้น
- ใช้งานง่ายและใช้งานง่ายด้วย Django
ไม่เคยพยายามผสานรวมSolrและDjango เข้าด้วยกัน แต่คุณสามารถทำเช่นนั้นกับHaystackได้ ฉันพบบทความที่น่าสนใจเหมือนกันและนี่คือgithubสำหรับมัน
- ข้อกำหนดด้านทรัพยากร - ไซต์จะโฮสต์บน VPS ดังนั้นเครื่องมือค้นหาจึงไม่จำเป็นต้องใช้ RAM และ CPU จำนวนมาก
Solrสายพันธุ์บน RAM, RAM ดังนั้นหากอยู่ในระดับสูงคุณไม่ต้องกังวลเกี่ยวกับSolr
การใช้ RAM ของ Solrถ่ายทำดัชนีอย่างเต็มรูปแบบหากคุณมีระเบียนหลายพันล้านรายการคุณสามารถใช้การนำเข้า Delta เพื่อจัดการสถานการณ์นี้ได้อย่างชาญฉลาด ตามที่อธิบายSolr เป็นเพียงการแก้ปัญหาแบบ real-time ซึ่งอยู่ใกล้กับ
Solrสามารถปรับขนาดได้อย่างมาก มีลักษณะในSolrCloud คุณสมบัติที่สำคัญบางประการของมัน
- Shards (หรือ sharding) เป็นแนวคิดของการกระจายดัชนีระหว่างเครื่องหลาย ๆ เครื่องบอกว่าดัชนีของคุณใหญ่เกินไปหรือไม่
- โหลดบาลานซ์ (ถ้าใช้Solrjกับเมฆ Solr มันจะดูแลโหลดบาลานซ์อัตโนมัติโดยใช้กลไก Round-Robin)
- การค้นหาแบบกระจาย
- ความพร้อมใช้งานสูง
- คุณสมบัติพิเศษเช่น "คุณหมายถึงอะไร" การค้นหาที่เกี่ยวข้อง ฯลฯ
สำหรับสถานการณ์ข้างต้นคุณสามารถใช้SpellCheckComponentที่แน่นขึ้นด้วยSolr มีจำนวนมากที่มีคุณสมบัติอื่น ๆ ที่SnowballPorterFilterFactoryจะช่วยให้การเรียกระเบียนบอกว่าถ้าคุณพิมพ์, หนังสือแทนหนังสือคุณจะนำเสนอกับผลที่เกี่ยวข้องกับหนังสือ
คำตอบนี้ในวงกว้างมุ่งเน้นไปที่Apache SolrและMySQL Django อยู่นอกขอบเขต
สมมติว่าคุณอยู่ภายใต้สภาพแวดล้อมของ LINUX คุณสามารถดำเนินการต่อในบทความนี้เพิ่มเติม (mine เป็นรุ่น Ubuntu 14.04)
รายละเอียดการติดตั้ง
เริ่มต้นใช้งาน
ดาวน์โหลดApache Solrจากที่นี่ ที่จะเป็นรุ่น4.8.1 คุณสามารถดาวน์โหลดเวอร์ชั่นใหม่ได้ฉันพบว่ามันเสถียร
หลังจากดาวน์โหลดไฟล์เก็บถาวรแล้วให้แตกไฟล์ลงในโฟลเดอร์ที่คุณต้องการ พูด .. Downloads
หรืออะไรก็ได้ .. ดังนั้นมันจะเป็นอย่างไรDownloads/solr-4.8.1/
ตามคำแนะนำของคุณ .. นำทางภายในไดเรกทอรี
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
ดังนั้นตอนนี้คุณอยู่ที่นี่ ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
เริ่ม Jetty Application Server
ท่าเทียบเรือมีอยู่ในโฟลเดอร์ตัวอย่างของsolr-4.8.1
ไดเรกทอรีดังนั้นเข้าไปข้างในและเริ่ม Jetty Application Server
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
ตอนนี้อย่าปิดเทอร์มินัลย่อเล็กสุดแล้วปล่อยให้มันอยู่ข้างๆ
(เคล็ดลับ: ใช้ & หลัง start.jar เพื่อให้ Jetty Server ทำงานในพื้นหลัง)
เพื่อตรวจสอบว่าApache Solrทำงานได้สำเร็จหรือไม่โปรดไปที่ URL นี้บนเบราว์เซอร์ http: // localhost: 8983 / Solr
รัน Jetty บนพอร์ตที่กำหนดเอง
มันทำงานบนพอร์ต 8983 เป็นค่าเริ่มต้น คุณสามารถเปลี่ยนพอร์ตได้ทั้งที่นี่หรือภายในjetty.xml
ไฟล์โดยตรง
java -Djetty.port=9091 -jar start.jar
ดาวน์โหลด JConnector
ไฟล์ JAR นี้ทำหน้าที่เป็นสะพานเชื่อมระหว่างMySQLและ JDBC ให้ดาวน์โหลดเวอร์ชั่นแพลตฟอร์มอิสระที่นี่
หลังจากดาวน์โหลดแล้วให้แตกโฟลเดอร์แล้วคัดลอกmysql-connector-java-5.1.31-bin.jar
และวางลงในไดเรกทอรีlib
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
การสร้างตาราง MySQL เพื่อเชื่อมโยงกับ Apache Solr
ในการทำให้Solrใช้คุณจำเป็นต้องมีตารางและข้อมูลเพื่อค้นหา สำหรับสิ่งนั้นเราจะใช้MySQLในการสร้างตารางและผลักดันชื่อแบบสุ่มและจากนั้นเราสามารถใช้Solrเพื่อเชื่อมต่อกับMySQLและสร้างดัชนีตารางนั้นและรายการของมัน
1. โครงสร้างตาราง
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. กำหนดตารางด้านบน
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
เข้าไปในแกนกลางและเพิ่มคำสั่ง lib
1. นำทางไปยัง
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2. การแก้ไข solrconfig.xml
เพิ่มคำสั่งทั้งสองนี้ลงในไฟล์นี้ ..
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
ตอนนี้เพิ่มDIH (ตัวจัดการการนำเข้าข้อมูล)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3. สร้างไฟล์ db-data-config.xml
หากไฟล์นั้นมีอยู่แล้วละเว้นให้เพิ่มบรรทัดเหล่านี้ในไฟล์นั้น ในขณะที่คุณสามารถเห็นบรรทัดแรกคุณจะต้องให้ข้อมูลประจำตัวของฐานข้อมูลMySQLของคุณ ชื่อฐานข้อมูลชื่อผู้ใช้และรหัสผ่าน
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(เคล็ดลับ: คุณสามารถมีเอนทิตีจำนวนเท่าใดก็ได้ แต่ต้องระวังช่อง id หากเหมือนกันการทำดัชนีจะข้ามไป)
4. แก้ไขไฟล์ schema.xml
เพิ่มสิ่งนี้ในschema.xmlของคุณตามที่แสดง ..
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
การดำเนินงาน
การจัดทำดัชนี
นี่คือที่จัดการจริง คุณต้องทำดัชนีข้อมูลจากMySQLไปยังSolr inorder เพื่อใช้ประโยชน์ของ Solr Queries
ขั้นตอนที่ 1: ไปที่แผงควบคุมของ Solr
กด URL http: // localhost: 8983 / solrบนเบราว์เซอร์ของคุณ หน้าจอเปิดเช่นนี้
ตามที่เครื่องหมายระบุไว้ให้ไปที่การเข้าสู่ระบบเพื่อตรวจสอบว่าการกำหนดค่าใด ๆ ข้างต้นทำให้เกิดข้อผิดพลาดหรือไม่
ขั้นตอนที่ 2: ตรวจสอบบันทึกของคุณ
ตกลงตอนนี้คุณอยู่ที่นี่คุณสามารถมีข้อความสีเหลืองจำนวนมาก (คำเตือน) ตรวจสอบให้แน่ใจว่าคุณไม่มีข้อความแสดงข้อผิดพลาดเป็นสีแดง ก่อนหน้านี้ในการกำหนดค่าของเราเราได้เพิ่มแบบสอบถามแบบใช้เลือกข้อมูลบนdb-data-config.xml ของเรากล่าวว่าหากมีข้อผิดพลาดใด ๆ ในแบบสอบถามนั้นจะปรากฏที่นี่
ดีไม่มีข้อผิดพลาด เราไปได้ดี ลองเลือกcollection1จากรายการตามที่ปรากฎแล้วเลือกDataimport
ขั้นตอนที่ 3: DIH (ตัวจัดการการนำเข้าข้อมูล)
ใช้กำที่คุณจะได้รับการเชื่อมต่อกับMySQLจากSolrผ่านแฟ้มการกำหนดค่าฐานข้อมูลข้อมูล-config.xmlจากSolrอินเตอร์เฟซและดึง 10 ระเบียนจากฐานข้อมูลที่ได้รับการจัดทำดัชนีบนSolr
ต้องการทำเช่นนั้นเลือกเต็มรูปแบบในการนำเข้าและตรวจสอบตัวเลือกที่สะอาดและCommit ตอนนี้คลิกดำเนินการตามที่แสดง
หรือคุณสามารถใช้แบบสอบถามนำเข้าแบบเต็มโดยตรงเช่นนี้ได้เช่นกัน ..
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
หลังจากที่คุณคลิกExecute , Solrเริ่มดัชนีระเบียนถ้ามีข้อผิดพลาดใด ๆ ก็จะบอกว่าการจัดทำดัชนีไม่และคุณจะต้องกลับไปเข้าสู่ระบบเพื่อดูสิ่งที่ผิดพลาดไปแล้ว
สมมติว่าไม่มีข้อผิดพลาดกับการกำหนดค่านี้และหากการจัดทำดัชนีเสร็จสมบูรณ์คุณจะได้รับการแจ้งเตือนนี้
ขั้นตอนที่ 4: เรียกใช้แบบสอบถาม Solr
ดูเหมือนว่าทุกอย่างเป็นไปด้วยดีตอนนี้คุณสามารถใช้Solr Queries เพื่อสืบค้นข้อมูลที่ถูกทำดัชนี คลิกQueryทางด้านซ้ายจากนั้นกดปุ่มExecuteที่ด้านล่าง
คุณจะเห็นบันทึกการจัดทำดัชนีตามที่แสดง
แบบสอบถามSolr ที่สอดคล้องกันสำหรับการแสดงรายการระเบียนทั้งหมดคือ
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
มีการบันทึกดัชนีทั้งหมด 10 รายการ สมมติว่าเราต้องการชื่อที่ขึ้นต้นด้วยJaเท่านั้นในกรณีนี้คุณต้องกำหนดเป้าหมายชื่อคอลัมน์solr_name
ดังนั้นข้อความค้นหาของคุณจะเป็นเช่นนี้
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
นั่นคือวิธีที่คุณเขียนแบบสอบถามSolr เพื่ออ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้, ตรวจสอบที่สวยงามนี้บทความ