Spätere Ergänzungen:
Warum einen Solr -Service verwenden, warum Luncce verwenden?
Die Frage ist: Wenn wir eine Einkaufswebsite besuchen, können wir Keywords basierend auf dem Inhalt eingeben, in dem wir den entsprechenden Inhalt abfragen möchten. Wie können wir das tun? Diese zufälligen Daten können nicht basierend auf den Datenbankfeldern abgefragt werden. Wie werden sie befragt? Warum können alle Arten von seltsamen Schlüsselwörtern befragt werden?
Die Antwort ist die Implementierung des Volltext-Such-Tools, und Luncce verwendet eine Wort-Element-Übereinstimmung und Wortsegmentierung. Zum Beispiel: Peking Tiananmen Square --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Es gibt einen Wortsegmentierer, der den ikanalyzer chinesischen Wortsegmentierer ist, der feinkörnig und intelligentes Schneiden hat, dh gemäß einem bestimmten intelligenten Algorithmus.
Dies ist der größte Vorteil der Verwendung von Solr: der Implementierung der Suchfunktion.
Schritte für die Verwendung;
(1) Solr -Server wird erstellt, da SolR mit Java5 entwickelt wird, sodass JDK und Tomcat benötigt werden. Erstellen und bereitstellen
(2) Nach Abschluss der Konstruktion müssen wir die Felder in die Solr -Bibliothek einführen. Konfigurieren Sie Spring und Solr, um Solr zu starten, wenn das Projekt startet
(3) Importieren Sie den Abfrageinhalt in der Datenbank in die Solr -Indexbibliothek, die vom SolrJ -Client implementiert wird. Für eine bestimmte Verwendung finden Sie auf der API
(4) Erstellen Sie einen Suchdienst für Kundenanrufe. Rufen Sie Solr an, um den Inhalt abzufragen. Es gibt eine Implementierung der Paging -Funktion. Implementierung von Solr -Hervorhebungen.
(5) Der Client empfängt die Anforderungsparameter der Seite, ruft den Suchdienst auf und führt die Suche durch.
Kriterien für die Beurteilung des Geschäftsbereichs:
1. Ob die Suche in diesem Feld erforderlich ist. Zum Beispiel: Produktname, Produktverkaufsargument, Produktbeschreibung
(Diese sind gleichwertig damit, dass das Etikett für Solr. Nach dem Import der Produktdaten den spezifischen Inhalt der entsprechenden Produkte in diesen Feldern teilt, und dann können wir nach relevanten Inhalten suchen.)
2. Ob dieses Feld für das nachfolgende Geschäft erforderlich ist. Zum Beispiel: Produkt -ID.
Erforderliche Felder:
1. Produkt -ID
2. Produkttitel
3. Verkaufspunkte
4. Preis
5. Produktbilder
6. Produktkategorie Name
7. Produktbeschreibung
Geschäftsfelder in Solr:
1. ID-》 Produkt-ID
Andere entsprechende Felder erstellen die Felder von Solr.
<field name="item_title" type="text_ik" indexed="true" stored="true"/><field name="item_sell_point" type="text_ik" indexed="true" stored="true"/><field name="item_price" type="long" indexed="true" stored="true" stored="true"/><field name="item_image" type="string" indexed = "false" gespeichert = "true" /> <field name = "item_category_name" type = "string" indexed = "trued" speicher = "true" /> <field name = "item_desc" type 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"/> <copyfields Source = "item_desc" destesc "destesc" dest = "item_keywords"/> <copyfield source = "item_desc" dest = "item_keywords"/>
Starten Sie Tomcat neu
Solr ist ein Top-Open-Source-Projekt unter Apache, das in Java entwickelt wurde und ein Volltext-Suchserver basierend auf Lucene ist. Solr bietet eine reichhaltigere Abfragesprache als Lucene und gleichzeitig konfigurierbar und erweiterbar und optimiert die Index- und Suchleistung.
Solr ist ein Volltext-Suchserver und kann nur durch Konfigurieren des Suchdienstes für einen Volltext realisieren. Reduzieren Sie den Druck auf die Datenbank aufgrund des häufigen Zugriffs auf die Datenbank effektiv.
Schritt 1: Solr im Linux -System bereitstellen.
Schritt 2: Solrj ist der Kunde von Solr und erfordert, dass sie sich auf das JAR -Paket von SolrJ verlassen.
Schritt 3: Fügen Sie den Inhalt der Datenbank zur Indexbibliothek der Solr -Bibliothek hinzu, so dass die Abfrage in der Indexbibliothek und nicht in der Datenbank abfragt wird.
Controller -Schicht:
@Controller @RequestMapping ("/Manager") public class itemController {@autowired private itemService itemService; @RequestMapping ("/importall") @ResponseBody public taotaoresult importAllitem () {taotaoresult result = itemsVice.importallItem (); Rückgabeergebnis; }} <br> Serviceschicht Schreiben: <br> Multi-Table-Abfrageprodukt, Logikschreiben auf der Seite: <br> mapper.java Paket com.taotao.search.mapper; importieren java.util.list; import com.taotao.search.pojo.item; public interface itemMapper {list <element> getItemList (); }mappper.xml
<? Namespace = "com.taotao.search.mapper.ItemMapper"> <select id = "getItemList" resultType = "com.taotao.search.pojo.Item"> Select A.id, A.Title, A.Sell_Point, A.Price, A.image, b. Name category_name aus tb_item a links join tb_item_cat b auf a.cid = b.id </select> </mapper>
Schritt 4: Schreiben Sie die Logik der Abfrage aus der Indexbibliothek:
// Produktinformationen aus der Indexbibliothek erhalten. Jetzt soll diese DAO -Ebene Informationen aus der Indexbibliothek erhalten, da die vorherige Schreiblogik darin bestand, die Daten in der DB in die Indexbibliothek zu importieren. Die nachfolgenden Abfragen werden alle aus der Indexbibliothek durchgeführt, nicht aus der Datenbank @RepositoryPublic Class SearchDaoImpl implementiert SearchDao {@autowired Private SolrServer SolrServer; @Override public SearchResult -Suche (SolrQuery -Abfrage) löst eine Ausnahme aus {// Dies soll die Abfrage direkt aus der IndexbibliotheksqueryResponse -Antwort = SolrServer.Query (Abfrage) ausführen; // Erhalten Sie das Ergebnis der Abfrage solrdocumentList documentlist = response.getResults (); SearchResult result = new SearchResult (); // Dies dient dazu, die Gesamtzahl der Datensätze zu erhalten. Liste <Itelement> itemlist = new ArrayList <> (); // Das Hervorheben des Produkts ist, dass sich die Schriftart die Farbe ändert, wenn sich die Maus zum Wort bewegt. Dies ist die Karte <String, Map <String, Liste <String >>> Hervorhebung = response.gethighlighting (); Für (Solrdocument Solrdocument: Documentlist) {// Jedes Solrdocument ist der Inhalt eines Produktpojo. Wir müssen also hier ein Pojo -Objekt für das Produkt erstellen, um das detaillierte Feldartikel zu erhalten. Element = new item (); item.setId ((String) SolRDocument.get ("id")); // Hervorhebung ist eine Titelliste <string> list = highlighting.get (solrdocument.get ("id")). Get ("item_title"); String; if (list! = null && list.size ()> 0) {title = list.get (0); } else {title = (string) solrdocument.get ("item_title"); } item.settitle (Titel); item.setPrice ((lang) solrdocument.get ("item_price")); item.setImage ((String) solrdocument.get ("item_image")); item.setCategory_name ((String) SolRDocument.get ("item_category_name")); item.setsell_point ((String) solrdocument.get ("item_sell_point")); itemlist.add (item); } result.setItemList (itemlist); Rückgabeergebnis; }}Schritt 5: Nachdem der Indexbibliotheksinhalt festgelegt wurde, werden Sie mit dem Schreiben einer externen Serviceschnittstelle mit dem Schreiben von Bedingungen wie Mobiltelefonen nach bestimmten Produkten suchen.
URL angeforderte:
/search/query?
Rückgabeergebnis: Taotaoresult Packaged Product List.
Erstellen Sie ein Pojo, das einer SQL -Anweisung entspricht, und erstellen Sie separat ein Pojo
Inhaltsliste zur Installation:
public class item {private String id; privater String -Titel; private String sell_point; privat langer Preis; privates Zeichenfolgenbild; private String category_name; private String item_des; }Controller -Schicht:
@ControllerPublic Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping (value = "/query", method = requestMethod.get) @RespondeBody public taotaoresult such (@RequestParam ("q") String queryString, @RequestParam (defaultValue = "1") Integer Page, @RequestParam (defaultValtevalue = ") Integer -Bedingung, {/ //. (Stringutils.isblank (queryString)) {return taotaoresult.build (400, "Abfragebedingung kann nicht leer sein"); } SearchResult SearchResult = null; try {queryString = new String (queryString.getBytes ("ISO8859-1"), "UTF-8"); SearchResult = SearchService.Search (QueryString, Seite, Zeilen); } catch (Ausnahme e) {e.printstacktrace (); return taotaoresult.build (500, exceptionutil.getStacktrace (e)); } return taotaoresult.ok (SearchResult); }} <br> <br> <br> 1 <span style = "Schriftgröße: 16px"> Serviceschicht: Verwenden Sie SolrJs Solrqurery, um abzufragen: </span>Die Voraussetzung besteht darin, zu schreiben, wie Sie Daten aus der Indexbibliothek lesen:
Das Folgende ist die Schnittstellenschicht des Dienstes:
Regler:
@ControllerPublic Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping (value = "/query", method = requestMethod.get) @RespondeBody public taotaoresult such (@RequestParam ("q") String queryString, @RequestParam (defaultValue = "1") Integer Page, @RequestParam (defaultValtevalue = ") Integer -Bedingung, {/ //. (Stringutils.isblank (queryString)) {return taotaoresult.build (400, "Abfragebedingung kann nicht leer sein"); } SearchResult SearchResult = null; try {queryString = new String (queryString.getBytes ("ISO8859-1"), "UTF-8"); SearchResult = SearchService.Search (QueryString, Seite, Zeilen); } catch (Ausnahme e) {e.printstacktrace (); return taotaoresult.build (500, exceptionutil.getStacktrace (e)); } return taotaoresult.ok (SearchResult); }} @ServicePublic Class SearchServiceImpl implementiert SearchService {@autowired Private SearchDao SearchDao; @Override public SearchResult -Suche (String queryString, int Seite, int Zeilen) löst Ausnahme aus {SolrQuery query = new SolrQuery (); query.setQuery (queryString); query.setStart ((Seite)*Zeilen); query.setRows (Zeilen); // Setzen Sie das Feld Standard -Abfrage -Suchfeld, dh die Standardabfrage query.set ("df", "item_keywords"); // Highlight query.sethighlight (true) einstellen; query.addhighlightfield ("item_title"); query.sethighlightSimplepre ("<em style =/" color: rot/">"); query.sethighlightSimplePost ("</em>"); // Führen Sie die Abfrage SearchResult SearchResult = Searchdao.search (Abfrage) aus; // Berechnen Sie, wie viele Seiten des Produkts lang auf dem Ergebnis basieren, RecordCount = SearchResult.getRecordCount (); long pagecount = recordCount/Zeilen; if (recordCount % Zeilen> 0) {PageCount ++; } SearchResult.setPageCount (PageCount); SearchResult.setCurpage ((lange) Seite); Rückkehr SearchResult; }}Der Kunde implementiert die Suchfunktion, indem sie Produkte eingeben:
Controller -Schicht:
@Regler
public class SearchController {@autowired Private SearchService SearchService; @RequestMapping ("/Search") öffentliche String-Suche (@RequestParam ("q") String queryString, @RequestParam (defaultValue = "1") Integer-Seite, Modellmodell) {if (queryString! } catch (unportedenCodingException e) {e.printstacktrace (); }} SearchResult SearchResult = SearchService.Search (QueryString, Seite); // Parameter model. //Model.addattribute("Totalpages ", SearchResult.getPageCount ()); model.addattribute ("itemList", SearchResult.getItemList ()); model.addattribute ("Seite", Seite); Rückgabe "Suche"; }}Serviceschicht:
@ServicePublic Class SearchServiceImPlements implementiert SearchService {@Value ("$ {search_base_url}") private String search_base_url; @Override Public SearchResult Search (String QueryString, int Seite) {// Was hier benötigt wird, ist der Parameter + Parameter. Die Anzahl der auf jeder Seite angezeigten Datensätze kann übergeben werden oder nicht // Rufen Sie den Dienst von Taotao-search // Abfrageparameter auf. param.put ("q", queryString); param.put ("Seite", Seite + ""); Versuchen Sie {// Die Service String JSON = httpclientUtil.doget (search_base_url, param); // Die Zeichenfolge in ein Java -Objekt Taotaoresult taotaoresult = taotaoresult.formattopojo (JSON, SearchResult.class) konvertieren; SearchResult result = (SearchResult) taotaoresult.getData (); Rückgabeergebnis; /* if (taotaoresult.getStatus () == 200) {}*/} catch (Ausnahme E) {e.printstacktrace (); null zurückkehren; }}}Der obige Artikel mit Solr, um die Produktsuchfunktion zu realisieren (Beispielerklärung) ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.