Adições posteriores:
Por que usar o serviço Solr, por que usar Luncence?
A pergunta é: quando visitamos um site de compras, podemos inserir palavras -chave com base no conteúdo que queremos consultar o conteúdo relevante. Como podemos fazer isso? Esses dados aleatórios não podem ser consultados com base nos campos do banco de dados. Como eles são consultados? Por que todos os tipos de palavras -chave estranhas podem ser consultadas?
A resposta é a implementação da ferramenta de pesquisa de texto completo, e Luncence usa a correspondência de elementos e a segmentação de palavras. Por exemplo: Pequim Tiananmen Square ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Há um segmento de palavras que é o segmento de palavras chinesas do ikanalyzer, que possui fatia de granulação fina e fatia inteligente, isto é, de acordo com um certo algoritmo inteligente.
Este é o maior benefício de usar o Solr: a implementação da função de pesquisa.
Etapas para uso;
(1) O servidor Solr é construído, porque o Solr é desenvolvido usando Java5, portanto, JDK e TomCat são necessários. Construir e implantar
(2) Após a conclusão da construção, precisamos apresentar os campos a serem exibidos na biblioteca Solr. Configure a primavera e o solr para iniciar o Solr quando o projeto iniciar
(3) Importe o conteúdo da consulta no banco de dados na biblioteca de índice Solr, que é implementada pelo cliente Solrj. Para uso específico, consulte a API
(4) Estabeleça um serviço de pesquisa para chamadas de clientes. Ligue para Solr para consultar o conteúdo, há uma implementação da função de paginação. Implementação do destaque do Solr.
(5) O cliente recebe os parâmetros de solicitação da página, chama o serviço de pesquisa e conduz a pesquisa.
Critérios de julgamento de campo de negócios:
1. Se a pesquisa neste campo é necessária. Por exemplo: nome do produto, ponto de venda do produto, descrição do produto
(Eles são equivalentes a dar o rótulo para Solr. Após importar os dados do produto, o Solr divide o conteúdo específico dos produtos correspondentes nesses campos e, em seguida
2. se este campo é necessário para negócios subsequentes. Por exemplo: ID do produto.
Campos necessários:
1. ID do produto
2. Título do produto
3. Pontos de venda
4. Preço
5. Fotos de produto
6. Nome da categoria do produto
7. Descrição do produto
Campos de negócios em Solr:
1. ID-》 ID do produto
Outros campos correspondentes criam os campos do Solr.
<nome do campo = "item_title" type = "text_ik" indexed = "true" stored = "true"/> <names do campo = "item_sell_point" type = "text_ik" indexed = "true" stored = "true"/> <nome do campo = "item_price" type = "long" = "" true "storred" "" "" "" "" "Stored =" item_price "type =" long "=" "true" ">" "" "" "" "" Stored = "item_price" type = "long" = "" true ""> "" " indexed = "false" armazenado = "true" /> <nome do campo = "item_category_name" type = "string" indexed = "true" armazenado = "true" /> <nome do campo = "item_desc" type = "text_ik" indexado "" True "Stored =" false " /> <field" "item_keygs_ik" "_kik "" "" text "" "text" "" text "" "text" "text" "text" "" text "" text "" text "" "text" text "" text "text" "" True "Stored =" false " /> <field" "itens_keys_ik" "" Multivalued = "true"/> <copyfield fonte = "item_title" dest = "item_keywords"/> <copyfield fonte = "item_sell_point" dest = "item_keywords"/> <copyfield fonte = "item_category_name" Dest = "Item_keywords"/> <field> ("Item_dsc" " dest = "item_keywords"/> <copyfield fonte = "item_desc" dest = "item_keywords"/>Reinicie o tomcat
O Solr é um projeto de código aberto superior do Apache, desenvolvido em Java, e é um servidor de pesquisa de texto completo com base no Lucene. O Solr fornece uma linguagem de consulta mais rica que o Lucene e, ao mesmo tempo, é configurável e extensível e otimiza o desempenho do índice e da pesquisa.
O Solr é um servidor de pesquisa de texto completo e pode realizar o serviço de pesquisa de texto completo apenas configurando-o. Reduza efetivamente a pressão no banco de dados devido ao acesso frequente ao banco de dados.
Etapa 1: Implante Solr no sistema Linux.
Etapa 2: O Solrj é o cliente da Solr e o uso requer confiar no pacote JAR de Solrj.
Etapa 3: adicione o conteúdo do banco de dados à biblioteca de índice do Solr, para que a consulta seja consultada na biblioteca de índices, não no banco de dados.
Camada do controlador:
@Controlador @requestmapping ("/gerente") classe pública ItemController {@aUTowired Private Itens Service Itens Service; @RequestMapping ("/importall") @ResponseBody public TaoTaoresult importallItem () {TaoTaoresult resultado = itens Service.importallItem (); resultado de retorno; }} <br> Escrita da camada de serviço: <br> Produto de consulta multi-tabela, escrita lógica exibida na página: <br> mapper.java pacote com.taotao.search.mapper; importar java.util.list; importação com.taotao.search.pojo.item; interface pública ItemMapper {list <tem> getItemList (); }mappper.xml
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "com.taotao.search.mapper.iTemmapper"> <select id = "getItemList" resultType = "com.taotao.search.pojo.item"> selecione a.id, a.title, a.sell_point, a.price, a.image, b. Nome category_name de tb_item a junção esquerda tb_item_cat b em a.cid = b.id </leclect> </mapper>
Etapa 4: Escreva a lógica da consulta da Biblioteca de Index:
// Obtenha informações do produto da biblioteca de índices. Agora, essa camada DAO é obter informações da biblioteca de índices, porque a lógica de gravação anterior era importar os dados no banco de dados para a biblioteca de índices. As consultas subsequentes são todas realizadas na biblioteca de índices, não do banco de dados @RepositoryPublic Class SearchDaoImpl implementa SearchDDAO {@AUTOWIRED SOLRSERVER SOLRSERVERVERVERVERVERVERS; @Override Public SearchResult Search (SolrQuery Query) lança Exceção {// Isso é para executar diretamente a consulta da resposta da biblioteca da Biblioteca de Indexs Response = Solrserver.Query (consulta); // obtém o resultado do SolrDocumentList DocumentList = Responsultsults (); SearchResult resultado = new SearchResult (); // Isso é para obter o número total de registros result.setRecordCount (documentList.getNumfound ()); List <tem> itemList = new ArrayList <> (); // O destaque do produto é que, quando o mouse se move para a palavra, a fonte muda de cor. Este é o mapa <string, map <string, list <string>> destacando = resposta.gethighlighting (); para (Solrdocument Solrdocument: DocumentList) {// Cada Solrdocument é o conteúdo de um pojo de produto, então aqui precisamos criar um objeto Pojo para o produto obter o item de campo detalhado = novo item (); item.setId ((String) Solrdocument.get ("ID")); // Destacando é uma lista de título <String> list = destaque.get (Solrdocument.get ("id")). Get ("item_title"); Corda; 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 (item); } resultado.setItemList (ItemList); resultado de retorno; }}Etapa 5: Depois que o conteúdo da biblioteca de índices for estabelecido, comece a escrever uma interface de serviço externa, ou seja, pesquisando produtos específicos através de condições, como telefones celulares, exibirá uma informação total da lista de telefonia móvel, qual página, quantas páginas e quantos resultados de pesquisa serão
URL solicitado:
/search/Query? Q = {Condições de consulta} & página = {página} & linhas = {linhas}
Resultado retornado: Lista de produtos embalados com taotaoresult.
Crie um pojo correspondente a uma declaração SQL e crie um pojo separadamente
Lista de conteúdo usado para instalar:
Public class Item {private String ID; título de sequência privada; String privada Sell_Point; preço longo privado; imagem de string privada; String privada category_name; private string item_des; }Camada do controlador:
@ControllerPublic Classe SearchController {@AUTOWIRED PRIVADO PARTILIZAÇÃO PARTILIZAÇÃO Pesquisa; @RequestMapping (value = "/Query", Method = requestMethod.get) @ResponseBody Public TaoTaoresult Search (@RequestParam ("Q") String querystring, @RequestParam (intafaultValue = "1") Page, @RequeM (defaultValue = "60"). (Stringutils.isblank (querystring)) {return taootaoresult.build (400, "A condição de consulta não pode estar vazia"); } SearchResult SearchResult = null; tente {querystring = new String (querystring.getbytes ("ISO8859-1"), "UTF-8"); SearchResult = SearchService.Search (Querystring, Page, linhas); } catch (Exceção e) {e.printStackTrace (); return taootaoresult.build (500, excepcionutil.getStackTrace (e)); } retornar taotaoresult.ok (SearchResult); }} <br> <br> <br> 1 <span style = "font-size: 16px"> Camada de serviço: use Solrj's Solrqurery para consultar: </span>O pré -requisito é escrever como ler dados da Biblioteca de Índice:
A seguir, a camada de interface do serviço:
controlador:
@ControllerPublic Classe SearchController {@AUTOWIRED PRIVADO PARTILIZAÇÃO PARTILIZAÇÃO Pesquisa; @RequestMapping (value = "/Query", Method = requestMethod.get) @ResponseBody Public TaoTaoresult Search (@RequestParam ("Q") String querystring, @RequestParam (intafaultValue = "1") Page, @RequeM (defaultValue = "60"). (Stringutils.isblank (querystring)) {return taootaoresult.build (400, "A condição de consulta não pode estar vazia"); } SearchResult SearchResult = null; tente {querystring = new String (querystring.getbytes ("ISO8859-1"), "UTF-8"); SearchResult = SearchService.Search (Querystring, Page, linhas); } catch (Exceção e) {e.printStackTrace (); return taootaoresult.build (500, excepcionutil.getStackTrace (e)); } retornar taotaoresult.ok (SearchResult); }} @ServicePublic Class SearchServiceImpl implementa o service Service {@AUTOWIRED PRIVADO PARTILHA PARTILHAPAO; @Override Public SearchResult Search (String QueryString, Int Page, int linhas) lança exceção {Solrquery Query = new Solrquery (); query.setQuery (querystring); query.setstart ((página-1)*linhas); query.setRows (linhas); // Defina o campo Pesquisa de consulta padrão, ou seja, a consulta padrão query.set ("df", "item_keywords"); // Defina Destaque Query.Sethighlight (true); query.addhighlightfield ("item_title"); Query.SethighlightSimplePre ("<EM Style =/" Color: Red/">"); query.sethighlightsimplepost ("</em>"); // executa o consulta SearchResult SearchResult = Searchdao.search (Query); // Calcule quantas páginas do produto são baseadas há muito tempo nos resultados registrcount = searchResult.getRecordCount (); Long Pagecount = RecordCount/linhas; if (recordCount % linhas> 0) {PageCount ++; } SearchResult.SetPageCount (PagEcount); SearchResult.setCurPage ((long) página); return SearchResult; }}O cliente implementa a função de pesquisa inserindo produtos:
Camada do controlador:
@Controlador
classe pública SearchController {@AUTOWIRed Private SearchService SearchService; @RequestMapping ("/Pesquise") PUNLIDADE PUBLICA (@RequestParam ("q") String querystring, @RequestParam (defaultValue = "1") página inteira, modelo modelo) {if (querystring! } Catch (UnsupportEdEncodingException e) {E.PrintStackTrace (); }} SearchResult SearchResult = SearchService.Search (QueryString, Page); // PASS parâmetros model.addattribute ("Query", Querystring); //Model.addattribute("totalPages ", SearchResult.getPageCount ()); Model.Addattribute ("ItemList", SearchResult.getItemList ()); model.addattribute ("página", página); retornar "pesquisa"; }}Camada de serviço:
@ServicePublic Class SearchServiceImpl implementa searchService {@Value ("$ {search_base_url}") private string search_base_url; @Override Public SearchResult Search (string QueryString, int página) {// O que é necessário aqui é o parâmetro Connection +. O número de registros exibidos em cada página pode ser passado ou não // chama o serviço do mapa de parâmetros de taotao-search // consulta <string, string> param = new hashmap <> (); param.put ("q", querystring); param.put ("página", página + ""); tente {// chamando a string de serviço json = httpclientutil.Doget (search_base_url, param); // converte a string em um objeto java taotaoresult taotaoresult = taotaoresult.formattopojo (json, searchResult.class); SearchResult resultado = (SearchResult) taotaoresult.getData (); resultado de retorno; /* if (taotaoresult.getStatus () == 200) {}*/} catch (Exceção e) {e.printStackTrace (); retornar nulo; }}}O artigo acima usando o Solr para realizar a função de pesquisa de produtos (exemplo de explicação) é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.