เพิ่มเติมเพิ่มเติม:
ทำไมต้องใช้บริการ SOLR ทำไมต้องใช้ LUNCENCE?
คำถามคือ: เมื่อเราเยี่ยมชมเว็บไซต์ช้อปปิ้งเราสามารถป้อนคำหลักตามเนื้อหาที่เราต้องการสอบถามเนื้อหาที่เกี่ยวข้อง เราจะทำสิ่งนี้ได้อย่างไร? ข้อมูลแบบสุ่มเหล่านี้ไม่สามารถสอบถามได้ตามฟิลด์ฐานข้อมูล พวกเขาเป็นอย่างไรบ้าง? ทำไมคำหลักแปลก ๆ ทุกชนิดจึงถูกสอบถามได้?
คำตอบคือการใช้งานเครื่องมือค้นหาข้อความแบบเต็มและ Luncence ใช้การจับคู่องค์ประกอบและการแบ่งส่วนคำ ตัวอย่างเช่น: ปักกิ่ง Tiananmen Square --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
มีคำศัพท์ที่เป็นคำศัพท์ที่เป็นคำศัพท์ภาษาจีน Ikanalyzer ซึ่งมีการหั่นย่อยอย่างละเอียดและการหั่นอัจฉริยะนั่นคือตามอัลกอริทึมอัจฉริยะบางอย่าง
นี่คือประโยชน์ที่ใหญ่ที่สุดของการใช้ SOLR: การใช้งานฟังก์ชั่นการค้นหา
ขั้นตอนสำหรับการใช้งาน;
(1) Solr Server ถูกสร้างขึ้นเนื่องจาก SOLR ได้รับการพัฒนาโดยใช้ Java5 ดังนั้นจึงจำเป็นต้องใช้ JDK และ Tomcat สร้างและปรับใช้
(2) หลังจากการก่อสร้างเสร็จสิ้นเราต้องแนะนำเขตข้อมูลที่จะแสดงลงในไลบรารี SOLR กำหนดค่าสปริงและ SOLR เพื่อเริ่ม SOLR เมื่อเริ่มโครงการ
(3) นำเข้าเนื้อหาแบบสอบถามในฐานข้อมูลไปยังไลบรารีดัชนี SOLR ซึ่งดำเนินการโดยไคลเอนต์ SOLRJ สำหรับการใช้งานเฉพาะโปรดดู API
(4) สร้างบริการค้นหาสำหรับการโทรของลูกค้า โทร SOLR เพื่อสอบถามเนื้อหามีการใช้งานฟังก์ชั่นการเพจ การใช้ไฮไลต์โซล
(5) ไคลเอนต์ได้รับพารามิเตอร์การร้องขอของหน้าโทรบริการค้นหาและดำเนินการค้นหา
เกณฑ์การตัดสินสาขาธุรกิจ:
1. การค้นหาในฟิลด์นี้เป็นสิ่งจำเป็นหรือไม่ ตัวอย่างเช่น: ชื่อผลิตภัณฑ์จุดขายสินค้าคำอธิบายผลิตภัณฑ์
(สิ่งเหล่านี้เทียบเท่ากับการให้ฉลากกับ Solr หลังจากนำเข้าข้อมูลผลิตภัณฑ์ Solr แบ่งเนื้อหาเฉพาะของผลิตภัณฑ์ที่เกี่ยวข้องในสาขาเหล่านี้แล้วเราสามารถค้นหาเนื้อหาที่เกี่ยวข้องได้)
2. ไม่ว่าจะเป็นฟิลด์นี้สำหรับธุรกิจที่ตามมาหรือไม่ ตัวอย่างเช่น: รหัสผลิตภัณฑ์
ฟิลด์ที่จำเป็น:
1. รหัสผลิตภัณฑ์
2. ชื่อผลิตภัณฑ์
3. จุดขาย
4. ราคา
5. รูปภาพผลิตภัณฑ์
6. ชื่อหมวดหมู่ผลิตภัณฑ์
7. คำอธิบายผลิตภัณฑ์
สาขาธุรกิจใน SOLR:
1. ID-》 รหัสผลิตภัณฑ์
ฟิลด์อื่น ๆ ที่สอดคล้องกันสร้างฟิลด์ของ SOLR
<field name = "item_title" type = "text_ik" indexed = "true" retored = "true"/> <ชื่อฟิลด์ = "item_sell_point" type = "text_ik" indexed = "true" retored = "true"/> <field name = "item_price indexed = "false" stored = "true" /> <field name = "item_category_name" type = "string" indexed = "true" stored = "true" /> <field name = "item_desc" type = "text_ik" indexed = "true" retored = "false" multivalued = "true"/> <copyfield source = "item_title" dest = "item_keywords"/> <copyfield source = "item_sell_point" dest = "item_keywords"/> <copyfield source = "item_category_name" dest = "item_keywords" dest = "item_keywords"/> <copyfield source = "item_desc" dest = "item_keywords"/>
รีสตาร์ท Tomcat
Solr เป็นโครงการโอเพนซอร์สชั้นนำภายใต้ Apache ที่พัฒนาขึ้นใน Java และเป็นเซิร์ฟเวอร์การค้นหาข้อความเต็มรูปแบบตาม Lucene Solr ให้ภาษาคิวรีที่สมบูรณ์ยิ่งขึ้นกว่า Lucene และในเวลาเดียวกันก็สามารถกำหนดค่าได้และขยายได้และเพิ่มประสิทธิภาพดัชนีและประสิทธิภาพการค้นหา
SOLR เป็นเซิร์ฟเวอร์การค้นหาข้อความแบบเต็มและสามารถรับรู้บริการค้นหาข้อความแบบเต็มได้โดยการกำหนดค่าเท่านั้น ลดความดันในฐานข้อมูลได้อย่างมีประสิทธิภาพเนื่องจากการเข้าถึงฐานข้อมูลบ่อยครั้ง
ขั้นตอนที่ 1: ปรับใช้ SOLR บนระบบ Linux
ขั้นตอนที่ 2: Solrj เป็นไคลเอนต์ของ Solr และการใช้มันต้องอาศัยแพ็คเกจ Jar ของ Solrj
ขั้นตอนที่ 3: เพิ่มเนื้อหาของฐานข้อมูลไปยังไลบรารีดัชนีของ SOLR เพื่อให้แบบสอบถามจะถูกสอบถามในไลบรารีดัชนีไม่ใช่ฐานข้อมูล
เลเยอร์คอนโทรลเลอร์:
@controller @requestmapping ("/manager") คลาสสาธารณะ itemController {@autoWired Private Itementservice itementervice; @RequestMapping ("/importall") @ResponseBody สาธารณะ taotaoresult importAllItem () {taotaoresult results = itemservice.importallitem (); ผลการกลับมา; }} <br> การเขียนเลเยอร์บริการ: <br> ผลิตภัณฑ์แบบสอบถามหลายตาราง, การเขียนตรรกะที่แสดงในหน้า: <br> mapper.java แพ็คเกจ com.taotao.search.mapper; นำเข้า java.util.list; นำเข้า com.taotao.search.pojo.item; ส่วนต่อประสานสาธารณะ itemmapper {list <ite> getItemList (); -mappper.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace = "com.taotao.search.mapper.itemmapper"> <select id = "getItemList" resultType = "com.taotao.search.pojo.item"> เลือก A.ID, A.TITLE, A.SELL_POINT ชื่อ category_name จาก tb_item ตัวเข้าร่วมซ้าย tb_item_cat b บน a.cid = b.id </select> </mapper>
ขั้นตอนที่ 4: เขียนตรรกะของการสืบค้นจากไลบรารีดัชนี:
// รับข้อมูลผลิตภัณฑ์จากไลบรารีดัชนี ตอนนี้เลเยอร์ DAO นี้จะได้รับข้อมูลจากไลบรารีดัชนีเนื่องจากตรรกะการเขียนก่อนหน้านี้คือการนำเข้าข้อมูลใน DB ไปยังไลบรารีดัชนี แบบสอบถามที่ตามมาทั้งหมดดำเนินการจากไลบรารีดัชนีไม่ใช่จากฐานข้อมูล @repositorypublic คลาส Searchdaoimpl ใช้ Searchdao {@autowired Solrserver Solrserver; @Override SearchResult Search (SolrQuery Query) โยนข้อยกเว้น {// นี่คือการเรียกใช้การสืบค้นโดยตรงจากดัชนีไลบรารี queryResponse Response = SolrServer.Query (แบบสอบถาม); // รับผลลัพธ์ของการสืบค้น solrDocumentList documentList = response.getResults (); SearchResult result = new SearchResult (); // นี่คือการได้รับจำนวนบันทึกทั้งหมด setRecordCount (documentList.getNumfound ()); รายการ <itect> itemList = arrayList ใหม่ <> (); // การเน้นผลิตภัณฑ์คือเมื่อเมาส์เคลื่อนที่ไปที่คำว่าตัวอักษรเปลี่ยนสี นี่คือแผนที่ <สตริงแผนที่ <สตริงรายการ <สตริง >>> การไฮไลต์ = response.gethighlighting (); สำหรับ (SolrDocument SolrDocument: DocumentList) {// SolrDocument แต่ละตัวเป็นเนื้อหาของผลิตภัณฑ์ POJO ดังนั้นที่นี่เราจำเป็นต้องสร้างวัตถุ POJO สำหรับผลิตภัณฑ์เพื่อรับรายการรายการฟิลด์โดยละเอียด = รายการใหม่ (); item.setId ((สตริง) solrdocument.get ("id")); // การไฮไลต์เป็นรายการชื่อเรื่อง <string> list = highlighting.get (solrdocument.get ("id")) รับ ("item_title"); สตริง; if (list! = null && list.size ()> 0) {title = list.get (0); } else {title = (string) solrdocument.get ("item_title"); } item.settitle (ชื่อ); item.setPrice ((ยาว) solrDocument.get ("item_price")); item.setImage ((String) SolrDocument.get ("item_image")); item.setCategory_name ((String) SolrDocument.get ("item_category_name")); item.setsell_point ((สตริง) solrdocument.get ("item_sell_point")); itemlist.add (รายการ); } result.setItemList (itemList); ผลการกลับมา; -ขั้นตอนที่ 5: หลังจากสร้างเนื้อหาไลบรารีดัชนีเริ่มเขียนอินเทอร์เฟซบริการภายนอกนั่นคือการค้นหาผลิตภัณฑ์เฉพาะผ่านเงื่อนไขเช่นโทรศัพท์มือถือจะแสดงข้อมูลรายการโทรศัพท์มือถือทั้งหมด
URL ที่ร้องขอ:
/search/query? q = {เงื่อนไขการสืบค้น} & page = {page} & rows = {rows}
ผลลัพธ์ที่ส่งคืน: รายการผลิตภัณฑ์ที่บรรจุ Taotaoresult
สร้าง pojo ที่สอดคล้องกับคำสั่ง SQL และสร้าง pojo แยกกัน
รายการเนื้อหาที่ใช้ในการติดตั้ง:
รายการคลาสสาธารณะ {รหัสสตริงส่วนตัว; ชื่อสตริงส่วนตัว; สตริงส่วนตัว sell_point; ราคาส่วนตัว ภาพสตริงส่วนตัว สตริงส่วนตัว category_name; สตริงส่วนตัว item_des; -เลเยอร์คอนโทรลเลอร์:
@ControllerPublic คลาส SearchController {@autowired SearchService SearchService; @RequestMapping (value = "/query", method = requestMethod.get) @ResponseBody การค้นหา taotaoresult สาธารณะ (@requestparam ("q") สตริง @RequestParam (defaultValue = "1") (stringutils.isblank (QueryString)) {return taotaoresult.build (400, "เงื่อนไขการสืบค้นไม่สามารถว่างเปล่า"); } searchResult searchResult = null; ลอง {queryString = สตริงใหม่ (querystring.getBytes ("iso8859-1"), "UTF-8"); searchResult = searchService.Search (QueryString, หน้า, แถว); } catch (exception e) {e.printstacktrace (); ส่งคืน taotaoresult.build (500, excteratil.getStackTrace (e)); } return taotaoresult.ok (searchresult); }} <br> <br> <br> 1 <span style = "Font-Size: 16px"> ชั้นบริการ: ใช้ Solrqurery ของ Solrj เพื่อค้นหา: </span>ข้อกำหนดเบื้องต้นคือการเขียนวิธีการอ่านข้อมูลจากไลบรารีดัชนี:
ต่อไปนี้เป็นเลเยอร์อินเตอร์เฟสของบริการ:
คอนโทรลเลอร์:
@ControllerPublic คลาส SearchController {@autowired SearchService SearchService; @RequestMapping (value = "/query", method = requestMethod.get) @ResponseBody การค้นหา taotaoresult สาธารณะ (@requestparam ("q") สตริง @RequestParam (defaultValue = "1") (stringutils.isblank (QueryString)) {return taotaoresult.build (400, "เงื่อนไขการสืบค้นไม่สามารถว่างเปล่า"); } searchResult searchResult = null; ลอง {queryString = สตริงใหม่ (querystring.getBytes ("iso8859-1"), "UTF-8"); searchResult = searchService.Search (QueryString, หน้า, แถว); } catch (exception e) {e.printstacktrace (); ส่งคืน taotaoresult.build (500, excteratil.getStackTrace (e)); } return taotaoresult.ok (searchresult); - @ServicePublic คลาส SearchServiceImpl ใช้ SearchService {@autowired Private Searchdao Searchdao; @Override SearchResult Search (String QueryString, หน้า int, แถว int) พ่นข้อยกเว้น {SolrQuery Query = new SolrQuery (); query.setQuery (QueryString); query.setStart ((หน้า 1)*แถว); query.setrows (แถว); // ตั้งค่าฟิลด์ค้นหาแบบสอบถามเริ่มต้นนั่นคือแบบสอบถามแบบสอบถามเริ่มต้น Set ("DF", "item_keywords"); // ตั้งค่าไฮไลต์แบบสอบถาม Sethighlight (จริง); query.addhighlightfield ("item_title"); Query.SethighlightSimplePre ("<em style =/" สี: สีแดง/">"); Query.SethighlightSimplePost ("</em>"); // ดำเนินการค้นหา searchResult searchResult = searchDao.search (Query); // คำนวณจำนวนหน้าของผลิตภัณฑ์ที่ยาวขึ้นอยู่กับผลลัพธ์ recordCount = searchResult.getRecordCount (); Long Pagecount = RecordCount/Rows; if (recordCount % แถว> 0) {pagecount ++; } searchResult.setPagecount (pagecount); searchResult.setCurpage ((ยาว) หน้า); ส่งคืน SearchResult; -ไคลเอนต์ใช้ฟังก์ชั่นการค้นหาโดยป้อนผลิตภัณฑ์:
เลเยอร์คอนโทรลเลอร์:
@Controller
Public Class SearchController {@autowired Private SearchService SearchService; @RequestMapping ("/search") การค้นหาสตริงสาธารณะ (@requestparam ("q") สตริง string, @requestparam (defaultValue = "1") หน้าจำนวนเต็ม, โมเดลโมเดล) {ถ้า (querystring! = null) {ลอง {queerystring = new String } catch (unsupportencodingexception e) {e.printstacktrace (); }} searchResult searchResult = searchService.Search (QueryString, หน้า); // pass พารามิเตอร์ model.addattribute ("Query", QueryString); //model.addattribute("totalpages ", searchResult.getPageCount ()); model.addattribute ("itemlist", searchResult.getItemList ()); model.addattribute ("หน้า", หน้า); กลับ "ค้นหา"; -ชั้นบริการ:
@ServicePublic คลาส SearchServiceImpl ใช้ SearchService {@Value ("$ {search_base_url}") สตริงส่วนตัว search_base_url; @Override SearchResult Search (String QueryString, หน้า int) {// สิ่งที่จำเป็นที่นี่คือการเชื่อมต่อ + พารามิเตอร์ จำนวนระเบียนที่แสดงในแต่ละหน้าสามารถส่งผ่านหรือไม่ // เรียกบริการของ Taotao-Search // พารามิเตอร์การสืบค้นแผนที่ <String, String> param = new hashmap <> (); param.put ("q", querystring); param.put ("หน้า", หน้า + ""); ลอง {// เรียกสตริงบริการ json = httpClientutil.doget (search_base_url, param); // แปลงสตริงเป็นวัตถุ Java taotaoresult taotaoresult = taotaoresult.formattopojo (json, searchResult.class); searchResult result = (searchResult) taotaoresult.getData (); ผลการกลับมา; /* ถ้า (taotaoresult.getStatus () == 200) {}*/} catch (Exception e) {E.printStackTrace (); คืนค่า null; -บทความข้างต้นโดยใช้ SOLR เพื่อรับรู้ฟังก์ชั่นการค้นหาผลิตภัณฑ์ (ตัวอย่างคำอธิบาย) เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น