Ajouts ultérieurs:
Pourquoi utiliser Solr Service, pourquoi utiliser la loncence?
La question est: lorsque nous visitons un site Web d'achat, nous pouvons saisir des mots clés en fonction du contenu que nous voulons interroger le contenu pertinent. Comment pouvons-nous faire cela? Ces données aléatoires ne peuvent pas être interrogées sur la base des champs de base de données. Comment sont-ils interrogés? Pourquoi toutes sortes de mots clés étranges peuvent-ils être interrogés?
La réponse est l'implémentation de l'outil de recherche en texte intégral, et Luncence utilise la correspondance des éléments de mots et la segmentation des mots. Par exemple: Pékin Tiananmen Square --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- afin que nous puissions rechercher lorsque nous recherchons.
Il y a un segmentant de mots qui est le segmenter de mots chinois Ikanalyzer, qui a des tranches à grains fins et des tranches intelligentes, c'est-à-dire, selon un certain algorithme intelligent.
Il s'agit du plus grand avantage de l'utilisation de SOLR: l'implémentation de la fonction de recherche.
Étapes à utiliser;
(1) Solr Server est construit, car Solr est développé à l'aide de Java5, donc JDK et Tomcat sont nécessaires. Construire et déployer
(2) Une fois la construction terminée, nous devons introduire les champs à afficher dans la bibliothèque Solr. Configurer le printemps et le solr pour démarrer Solr lorsque le projet démarre
(3) Importez le contenu de requête dans la base de données dans la bibliothèque d'index SOLR, qui est implémentée par le client SOLRJ. Pour une utilisation spécifique, veuillez vous référer à l'API
(4) Établir un service de recherche pour les appels clients. Appelez Solr pour interroger le contenu, il y a une implémentation de la fonction de pagination. Implémentation de la mise en évidence SOLR.
(5) Le client reçoit les paramètres de demande de la page, appelle le service de recherche et effectue une recherche.
Critères de jugement sur le terrain des affaires:
1. Que la recherche sur ce champ est requise. Par exemple: nom du produit, point de vente du produit, description du produit
(Ceux-ci sont équivalents à donner l'étiquette à Solr. Après l'importation des données du produit, Solr divise le contenu spécifique des produits correspondants dans ces champs, puis nous pouvons rechercher un contenu pertinent)
2. Si ce champ est requis pour les activités suivantes. Par exemple: ID de produit.
Champs requis:
1. ID de produit
2. Titre du produit
3. Points de vente
4. Prix
5. Photos de produit
6. Nom de la catégorie de produit
7. Description du produit
Fields d'affaires à Solr:
1. ID -》 ID de produit
D'autres champs correspondants créent les champs de Solr.
<field name = "item_title" type = "text_ik" indexé = "true" stocké = "true" /> <champ name = "item_sell_point" type = "text_ik" indexé = "true" indexé = "true" store = "true" store = "true" /> <fiel indexé = "false" stocké = "true" /> <champ name = "item_category_name" type = "string" indexée = "true" stored = "true" /> <champ name = "item_desc" type = "item_kek" Multivalied = "true" /> <copyfield source = "item_title" dest = "item_keywords" /> <copyfield source = "item_sell_point" dest = "item_keywords" /> <copyfield source = "item_category_name" dest = "item_keywords" /> <copyfield source = "itec_desc" dest = "item_keywords" /> <copyfield Source = "item_desc" dest = "item_key dest = "item_keywords" /> <copyfield source = "item_desc" dest = "item_keywords" />
Redémarrer Tomcat
Solr est un projet Open Source Top sous Apache, développé en Java, et est un serveur de recherche en texte complet basé sur Lucene. SOLR fournit un langage de requête plus riche que Lucene, et en même temps, il est configurable et extensible, et optimise les performances d'index et de recherche.
Solr est un serveur de recherche en texte intégral et peut réaliser le service de recherche en texte intégral uniquement en le configurant. Réduisez efficacement la pression sur la base de données en raison d'un accès fréquent à la base de données.
Étape 1: Déployez SOLR sur le système Linux.
Étape 2: Solrj est le client de Solr, et l'utiliser nécessite de s'appuyer sur le package JAR de Solrj.
Étape 3: Ajoutez le contenu de la base de données à la bibliothèque d'index du SOLR, afin que la requête soit interrogée dans la bibliothèque d'index, et non dans la base de données.
Couche de contrôleur:
@ Contrôleur @ requestmapping ("/ manager") public class itemController {@autowired private itemService itemService; @RequestMapping ("/ importall") @ResponseBody public TaotaoResult importallitem () {taotaoResult result = itemService.importallitem (); Résultat de retour; }} <br> Écriture de la couche de service: <br> Produit de requête multi-table, écriture logique affichée sur la page: <br> mapper.java package com.taotao.search.mapper; Importer java.util.list; import com.taotao.search.pojo.item; interface publique itemMapper {list <teticle> getItemList (); }mappper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mappen 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "com.taotao.search.mapper.itemmapper"> <select id = "getItemList" resultType = "com.taotao.search.pojo.item"> select a.id, a.title, a.sell_point, a.pririce, a.image, b. Nom Catégory_name à partir de tb_item a gauche jointure tb_item_cat b sur a.cid = b.id </lect> </ mapper>
Étape 4: Écrivez la logique de la requête de la bibliothèque d'index:
// Obtenez des informations sur le produit de la bibliothèque d'index. Maintenant, cette couche DAO vise à obtenir des informations de la bibliothèque d'index, car la logique d'écriture précédente devait importer les données dans la DB dans la bibliothèque d'index. Les requêtes suivantes sont toutes réalisées à partir de la bibliothèque d'index, et non à partir de la classe de données @RepositoryPublic SeechDaoimpl implémente SearchDao {@Autowired Private SolrServer SolrServer; @Override public SearchResult Search (SolrQuery Query) lève une exception {// Ceci est d'exécuter directement la requête de la bibliothèque d'index Response de questionponse = solrServer.Query (query); // obtient le résultat de la question SolrDocumentList DocumentList = Response.getResults (); SearchResult Result = new SearchResult (); // Il s'agit d'obtenir le nombre total d'enregistrements Result.SetRecordCount (documentList.getNumFound ()); List <teticle> itemlist = new ArrayList <> (); // La mise en évidence du produit est que lorsque la souris se déplace vers le mot, la police change de couleur. Ceci est la carte <String, map <string, list <string>>> halthing = réponse.Gethighlighting (); for (solrDocument solrDocument: documentList) {// Chaque solrDocument est le contenu d'un produit PoJo, donc nous devons ici créer un objet PoJo pour le produit pour obtenir l'élément de champ détaillé élément = nouveau élément (); item.setid ((string) solrDocument.get ("id")); // La surtension est une liste de titres <string> list = halthing.get (solrDocument.get ("id")). Get ("item_title"); Chaîne; if (list! = null && list.size ()> 0) {title = list.get (0); } else {title = (string) solrDocument.get ("item_title"); } item.setTitle (title); item.setprice ((long) 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ésultat de retour; }}Étape 5: Une fois le contenu de la bibliothèque d'index établi, commencez à écrire une interface de service externe, c'est-à-dire la recherche de produits spécifiques à travers des conditions, telles que les téléphones mobiles, affichera une information totale de liste de téléphones mobiles, quelle page, le nombre de pages et le nombre de résultats de recherche seront
URL demandée:
/ Search / Query? Q = {Conditions de requête} & Page = {page} & Rows = {Rows}
Résultat retourné: liste de produits emballés taotaoresult.
Créez un POJO correspondant à une instruction SQL et créez un POJO séparément
Liste du contenu utilisé pour installer:
Élément de classe publique {ID de chaîne privée; titre de chaîne privée; chaîne privée sell_point; prix long privé; image de chaîne privée; Catégorie de chaîne privée_name; String privé item_des; }Couche de contrôleur:
@ControllerPublic Class SearchController {@autowired private SearchService SearchService; @Requestmapping (value = "/ query", méthode = requestMethod.get) @ResponseBodyBody public TaotaoResult search (@RequestParam ("Q") String QueryString, @RequestParam (defaultValue = "1") Page entière, @RequestParam (DefauftValue = "60") ROWS INTEGER) {// la question de la query est vide If If vide) (StringUtils.isblank (queystrstring)) {return taotaoresult.build (400, "La condition de requête ne peut pas être vide"); } SearchResult searchResult = null; try {queryString = new String (queeryString.getBytes ("iso8859-1"), "utf-8"); SearchResult = searchService.Search (queRystring, page, lignes); } catch (exception e) {e.printStackTrace (); return taotaoresult.build (500, exceptionUtil.getStackTrace (e)); } return taotaoresult.ok (SearchResult); }} <br> <br> <br> 1 <Span Style = "Font-Size: 16px"> Couche de service: Utilisez Solrj's SolrQurery pour interroger: </span>La condition préalable consiste à écrire comment lire les données de la bibliothèque d'index:
Ce qui suit est la couche d'interface du service:
contrôleur:
@ControllerPublic Class SearchController {@autowired private SearchService SearchService; @Requestmapping (value = "/ query", méthode = requestMethod.get) @ResponseBodyBody public TaotaoResult search (@RequestParam ("Q") String QueryString, @RequestParam (defaultValue = "1") Page entière, @RequestParam (DefauftValue = "60") ROWS INTEGER) {// la question de la query est vide If If vide) (StringUtils.isblank (queystrstring)) {return taotaoresult.build (400, "La condition de requête ne peut pas être vide"); } SearchResult searchResult = null; try {queryString = new String (queeryString.getBytes ("iso8859-1"), "utf-8"); SearchResult = searchService.Search (queRystring, page, lignes); } catch (exception e) {e.printStackTrace (); return taotaoresult.build (500, exceptionUtil.getStackTrace (e)); } return taotaoresult.ok (SearchResult); }} @ServicePublic Class SearchServiceIMPl implémente SearchService {@autowired private searchdao searchdao; @Override public SearchResult Search (String QueryString, int page, intr lignes) lève une exception {solrQuery query = new SolrQuery (); Query.setQuery (QueryString); query.setStart ((page-1) * lignes); query.setrows (lignes); // Définit le champ de recherche de requête par défaut, c'est-à-dire la question par défaut query.set ("df", "item_keywords"); // Définit Query.Sethighlight (true); query.addhighlightfield ("item_title"); query.sethighlightsimplepre ("<em style = /" couleur: rouge / ">"); query.sethighlightsimplepost ("</em>"); // Exécuter la requête SearchResult SearchResult = searchdao.search (requête); // Calculez le nombre de pages du produit longue en fonction des résultats recordCount = searchResult.getRecordCount (); long pageCount = recordCount / lignes; if (enregistreCount% lignes> 0) {pageCount ++; } searchResult.SetPageCount (PageCount); SearchResult.setCurpage ((longue) page); return searchResult; }}Le client implémente la fonction de recherche en entrant des produits:
Couche de contrôleur:
@Contrôleur
classe publique SearchController {@autowired private SearchService searchService; @RequestMapping ("/ Search") Public String Search (@RequestParam ("Q") String QueryString, @RequestParam (defaultValue = "1") Page entière, modèle modèle) {if (QuerryString! = Null) {try {QuerryString = new String (queystring.getBytes ("isO8859-1"), "utf."); } catch (UnportEnCcodingException e) {e.printStackTrace (); }} SearchResult searchResult = searchService.Search (queystring, page); // PASS Paramètres Model.AdDAttribute ("Query", QueryString); //Model.addattribute("TotalPages ", searchResult.getPageCount ()); Model.AddAttribute ("ItemList", SearchResult.getItemList ()); Model.AddAttribute ("page", page); retourner "Search"; }}Couche de service:
@ServicePublic Class SearchServiceImpl implémente SearchService {@Value ("$ {search_base_url}") String privé Search_Base_Url; @Override public SearchResult Search (String QueryString, int page) {// Ce qui est nécessaire ici est le paramètre Connexion +. Le nombre d'enregistrements affichés sur chaque page peut être passé ou non // appelle le service de Taotao-Search // Paramètres de requête Map <String, String> Param = new Hashmap <> (); param.put ("Q", QueryString); param.put ("page", page + ""); essayez {// appelant la chaîne de service json = httpclienttutil.doget (search_base_url, param); // convertir la chaîne en un objet Java Taotaoresult Taotaoresult = Taotaoresult.Formattopojo (JSON, SearchResult.class); SearchResult Result = (SearchResult) taotaoresult.getData (); Résultat de retour; / * if (taotaoresult.getStatus () == 200) {} * /} catch (exception e) {e.printStackTrace (); retourner null; }}}L'article ci-dessus utilisant SOLR pour réaliser la fonction de recherche de produit (exemple explication) est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.