Adiciones posteriores:
¿Por qué utilizar el servicio Solr, por qué usar Luncence?
La pregunta es: cuando visitamos un sitio web de compras, podemos ingresar palabras clave en función del contenido que queremos consultar el contenido relevante. ¿Cómo podemos hacer esto? Estos datos aleatorios no se pueden consultar en función de los campos de la base de datos. ¿Cómo se consultan? ¿Por qué se pueden consultar todo tipo de palabras clave extrañas?
La respuesta es la implementación de la herramienta de búsqueda de texto completo, y Luncence utiliza coincidencia de elementos de palabras y segmentación de palabras. Por ejemplo: Beijing Tiananmen Square ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hay un segmento de palabras que es el segmento de palabras chino Ikanalyzer, que tiene cortes de grano fino y cortes inteligentes, es decir, según cierto algoritmo inteligente.
Este es el mayor beneficio de usar SOLR: la implementación de la función de búsqueda.
Pasos para su uso;
(1) El servidor SOLR está construido, porque Solr se desarrolla usando Java5, por lo que se necesitan JDK y Tomcat. Construir e implementar
(2) Después de completar la construcción, necesitamos introducir los campos que se mostrarán en la biblioteca Solr. Configurar Spring y Solr para iniciar SOLR cuando se inicia el proyecto
(3) Importar el contenido de consulta en la base de datos en la biblioteca de índice SOLR, que implementa el cliente SOLRJ. Para un uso específico, consulte la API
(4) Establezca un servicio de búsqueda para llamadas al cliente. Llame a Solr para consultar el contenido, hay una implementación de la función de paginación. Implementación de resaltado SOLR.
(5) El cliente recibe los parámetros de solicitud de la página, llama al servicio de búsqueda y realiza la búsqueda.
Criterios de juicio de campo comercial:
1. Si se requiere buscar en este campo. Por ejemplo: nombre del producto, punto de venta del producto, descripción del producto
(Estos son equivalentes a dar la etiqueta a Solr. Después de importar los datos del producto, Solr divide el contenido específico de los productos correspondientes en estos campos, y luego podemos buscar contenido relevante)
2. Si este campo es necesario para negocios posteriores. Por ejemplo: ID de producto.
Campos requeridos:
1. ID de producto
2. Título del producto
3. Puntos de venta
4. Precio
5. Fotos de productos
6. Nombre de la categoría de producto
7. Descripción del producto
Campos de negocios en Solr:
1. ID-》 ID de producto
Otros campos correspondientes crean los campos de 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" indexado = "false" almacenado = "true" /> <field name = "item_category_name" type = "string" indexed = "true" almacenado = "true" /> <field name = "item_desc" type = "text_ik" indexed = "true" almacenado = "falso" /> <field name = "itter_keyals" type = "text_ik" indexado = "true" stored = "stored =" falso " multivalueed = "true"/> <copyfield source = "item_title" dest = "item_keywords"/> <copyfield source = "item_sell_point" dest = "item_keywords"/> <copyfield source = "item_category_name" dest = "item_keywords"/> <Source = "item_Desc" item_keywords "/> <<popyfield source" dest = "item_keywords"/> <copyfield source = "item_desc" dest = "item_keywords"/>
Reiniciar Tomcat
SOLR es un proyecto de código abierto superior en Apache, desarrollado en Java, y es un servidor de búsqueda de texto completo basado en Lucene. Solr proporciona un lenguaje de consulta más rico que Lucene, y al mismo tiempo es configurable y extensible, y optimiza el rendimiento del índice y la búsqueda.
Solr es un servidor de búsqueda de texto completo y puede realizar el servicio de búsqueda de texto completo solo al configurarlo. Reduzca efectivamente la presión en la base de datos debido al acceso frecuente a la base de datos.
Paso 1: Implemente SOLR en el sistema Linux.
Paso 2: Solrj es el cliente de Solr, y usarlo requiere confiar en el paquete JAR de Solrj.
Paso 3: Agregue el contenido de la base de datos a la biblioteca de índice de SOLR, de modo que la consulta se consulte en la biblioteca de índice, no en la base de datos.
Capa del controlador:
@Controlador @requestmapping ("/administrador") clase pública itemController {@aUtoWired Elementservice itemservice; @RequestMapping ("/Importall") @ResponseBody Public TaOtaoresult ImportAllItem () {Taotaoresult result = itemservice.ImportAllItem (); resultado de retorno; }}} <br> Escritura de capa de servicio: <br> Producto de consulta múltiple, escritura lógica que se muestra en la página: <br> mapper.java paquete com.taotao.search.mapper; import java.util.list; import com.taotao.search.pojo.item; interfaz pública itemMapper {list <emitem> getItemList (); }mappper.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 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"> Seleccionar a.id, a.title, a.sell_point, A.Price, A.Image, b. Nombre Category_Name de tb_item A Left tb_item_cat b en a.cid = b.id </select> </mapper>
Paso 4: Escriba la lógica de consulta desde la biblioteca de índice:
// Obtener información del producto de la biblioteca de índice. Ahora, esta capa DAO es obtener información de la biblioteca de índices, porque la lógica de escritura anterior era importar los datos en el DB en la biblioteca de índice. Las consultas posteriores se realizan desde la biblioteca de índice, no desde la base de datos @RepositoryPublic Class SearchDaoImpl implementa SearchDao {@aUtowired private solrserver solrserver; @Override Public SearchResult Search (SolrQuery Query) lanza la excepción {// Esto es ejecutar directamente la consulta desde la respuesta de la biblioteca de índice de respuesta = solrserver.Query (consulta); // Obtenga el resultado de la consulta SolrDocumentList documentList = respuesta.getResults (); SearchResult result = new SearchResult (); // Esto es para obtener el número total de registros result.setRecordCount (documentList.getNumFound ()); Lista <emem> itemList = new ArrayList <> (); // El resaltado del producto es que cuando el mouse se mueve a la palabra, la fuente cambia de color. Este es el mapa <string, map <string, list <string>>> resaltar = respuesta.gethighlighting (); para (solrDocument SolrDocument: DocumentList) {// Cada solrDocument es el contenido de un producto POJO, por lo que aquí necesitamos crear un objeto POJO para que el producto obtenga el elemento de campo detallado elemento = nuevo elemento (); item.SetId (((String) solrDocument.get ("id")); // resaltar es una lista de títulos <String> list = resalting.get (solrDocument.get ("id")). Get ("item_title"); Cadena; if (list! = null && list.size ()> 0) {title = list.get (0); } else {title = (string) solrDocument.get ("item_title"); } item.settitle (título); 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 (Artículo); } result.setItemList (itemList); resultado de retorno; }}Paso 5: Después de establecer el contenido de la biblioteca índice, comience a escribir una interfaz de servicio externa, es decir, la búsqueda de productos específicos a través de condiciones, como los teléfonos móviles, mostrará una información total de la lista de teléfonos móviles, qué página, cuántas páginas y cuántos resultados de búsqueda serán
URL solicitada:
/Search/Query? Q = {Condiciones de consulta} & Page = {Page} & Rows = {filas}
Resultado devuelto: Lista de productos empaquetados de Taotaoresult.
Cree un pojo correspondiente a una declaración SQL y cree un pojo por separado
Lista de contenidos utilizados para instalar:
Artículo de clase pública {ID de cadena privada; título de cadena privada; cadena privada sell_point; Precio Precio Precio; imagen de cadena privada; Categy_name de cadena privada; cadena privada item_des; }Capa del controlador:
@ControllerPublic Class SearchController {@AUTOWIREDIREDIRIRD SearchService SearchService; @RequestMapping (valor = "/query", método = requestmethod.get) @ResponseBody Public TaOtaoresult Search (@RequestParam ("Q") String QueryString, @RequestParam (defaultValue = "1") Página entera, @RequestParam (defaultValue = "60") INTENER ROWS) (StringUtils.isblank (QueryString)) {return taotaoresult.build (400, "condición de consulta no puede estar vacía"); } SearchResult SearchResult = null; Pruebe {QueryString = new String (QueryString.getBytes ("ISO8859-1"), "UTF-8"); SearchResult = SearchService.Search (QueryString, página, filas); } catch (Exception e) {E.PrintStackTrace (); devolver taotaoresult.build (500, excepcionUtil.getStackTrace (e)); } return taotaoresult.ok (SearchResult); }} <br> <br> <br> 1 <span style = "font-size: 16px"> capa de servicio: use la solrj de solrj para consultar: </span>El requisito previo es escribir cómo leer datos de la biblioteca de índice:
La siguiente es la capa de interfaz del servicio:
controlador:
@ControllerPublic Class SearchController {@AUTOWIREDIREDIRIRD SearchService SearchService; @RequestMapping (valor = "/query", método = requestmethod.get) @ResponseBody Public TaOtaoresult Search (@RequestParam ("Q") String QueryString, @RequestParam (defaultValue = "1") Página entera, @RequestParam (defaultValue = "60") INTENER ROWS) (StringUtils.isblank (QueryString)) {return taotaoresult.build (400, "condición de consulta no puede estar vacía"); } SearchResult SearchResult = null; Pruebe {QueryString = new String (QueryString.getBytes ("ISO8859-1"), "UTF-8"); SearchResult = SearchService.Search (QueryString, página, filas); } catch (Exception e) {E.PrintStackTrace (); devolver taotaoresult.build (500, excepcionUtil.getStackTrace (e)); } return taotaoresult.ok (SearchResult); }} @ServicePublic Class SearchServiceImpl implementa SearchService {@AUTOWIREDIRDIRED Searchdao Searchdao; @Override public SearchResult Search (String QueryString, int Page, Int Rows) lanza la excepción {SolrQuery Query = new SolrQuery (); Query.setQuery (QueryString); Query.setStart ((Page-1)*filas); Query.SetRows (filas); // Establecer el campo de búsqueda de consulta predeterminado, es decir, la consulta predeterminada Query.set ("df", "item_keywords"); // establecer la consulta de resaltar.sethighlight (verdadero); query.addhighlightfield ("item_title"); Query.SethighlightSimplePre ("<em style =/" color: rojo/">"); Query.SethighlightSimplePost ("</em>"); // Ejecutar la consulta SearchResult SearchResult = SearchDao.Search (consulta); // Calcule cuántas páginas del producto se basan en los resultados récordscount = searchResult.getRecordCount (); Long pageCount = RecordCount/Rows; if (RecordCount % filas> 0) {pageCount ++; } SearchResult.SetPageCount (pageCount); SearchResult.SetCurPage ((Long) página); return SearchResult; }}El cliente implementa la función de búsqueda ingresando productos:
Capa del controlador:
@Controlador
Public Class SearchController {@aUtowired private SeechService Searchservice; @RequestMapping ("/Search") Public String Search (@RequestParam ("Q") String QueryString, @RequestParam (defaultValue = "1") Integer Page, Model Model) {if (QueryString! = NULL) {try {QueryString = New String (QueryString.getBytes ("ISO8859-1"), "),"); } catch (UnsupportedEncodingException e) {E.PrintStackTrace (); }} SearchResult SearchResult = SearchService.Search (QueryString, página); // Pases parámetros modelo.addattribute ("Query", QueryString); //Model.addattribute("TotalPages ", searchResult.getPageCount ()); Model.addattribute ("itemList", searchResult.getItemList ()); model.addattribute ("página", página); devolver "búsqueda"; }}Capa de servicio:
@ServicePublic Class SearchServiceImpl implementa SearchService {@Value ("$ {search_base_url}") privado String Search_base_url; @Override public SearchResult Search (String QueryString, int Page) {// Lo que se necesita aquí es la conexión + parámetro. El número de registros que se muestran en cada página se pueden aprobar o no // llamar al servicio de Taotao-Search // Parámetros de consulta map <string, string> param = new Hashmap <> (); param.put ("Q", QueryString); param.put ("página", página + ""); Pruebe {// llamando a la cadena de servicio JSON = httpClientUtil.doget (search_base_url, param); // Convierta la cadena en un objeto Java Taotaoresult taotaoresult = taotaoresult.formattopojo (json, searchResult.class); SearchResult result = (SearchResult) Taotaoresult.getData (); resultado de retorno; /* if (taotaoresult.getStatus () == 200) {}*/} Catch (Exception e) {E.PrintStackTrace (); regresar nulo; }}}El artículo anterior que usa SOLR para realizar la función de búsqueda de productos (explicación de ejemplo) es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.