Ambiente experimental
Primeiro de tudo, é claro, você precisa instalar o ambiente Elasticsearch. É melhor instalar o Visual Plug-in Elasticsearch-Head para facilitar a visualização de dados intuitivamente.
Obviamente, você pode se referir à minha postagem nesta parte: "Instalação de pesquisa elástica e preenchimento de poços no CentOS7"
Meu ES está instalado em http://113.209.119.170:9200/ (este endereço precisa ser atribuído ao projeto Springboot)
Criação do projeto da primavera
Não há explicação especial para esta parte, mas há algumas coisas para ter cuidado.
Observe que, ao criar um novo projeto, lembre -se de verificar as dependências do Elasticsearch na Web e no NOSQL e vamos tirar uma foto para ilustrar:
Ao criar um projeto, verifique a opção de dependência ES no NoSQL.
Depois que o projeto é gerado automaticamente, a dependência da Spring-Boot-Starter-Data-Elasticsearch será adicionada automaticamente ao pom.xml:
<Depencency> <PuerpId> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-Starter-Data-Elasticsarch </ArtifactId> </Dependency>
Neste projeto, usamos o Jest de cliente ES RESTful ES Java, por isso também precisamos adicionar dependências de jest no pom.xml:
<Depencency> <voupid> io.searchbox </frupid> <stifactId> JEST </sutifactId> </ndependence>
Além disso, você deve adicionar dependências JNA:
<Depencency> <voundid> net.java.dev.jna </frupid> <ArtifactId> jna </sutifactId> </pendendence>
Caso contrário, ao iniciar o projeto da primavera, um erro de JNA não foi encontrado. Os métodos nativos serão desativados.:
JNA não encontrado. Os métodos nativos serão desativados.
O endereço do servidor ES precisa ser configurado no arquivo de configuração do projeto Application.yml
Servidor: Porta: 6325Spring: Elasticsearch: Jest: Uris: - http://113.209.119.170:9200 # Endereço do ser servidor! Leia-timeout: 5000
Organização de código
Meu código de projeto está organizado da seguinte forma:
Organização do código do projeto
Cada parte do código é explicada da seguinte forma, e os comentários são:
Entity.java
pacote com.hansonwang99.springboot_es_demo.entity; importar java.io.Serializable; importar org.springframework.data.elasticsearch.annoTations.document; entidade pública IMPLEMMENTES SERIALIZABLE {STATION PRIVATIVATION LIMO public static final string index_name = "index_entity"; public static final string type = "tstype"; Private Long Id; nome de string privado; public entity () {super (); } entidade pública (ID longo, nome da string) {this.id = id; this.name = nome; } public long getId () {return id; } public void setId (longo id) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; }} TestService.java
pacote com.hansonwang99.springboot_es_demo.service; importar com.hansonwang99.springboot_es_demo.entity.entity; importar java.util.list; interface pública TestService {void Saveentity (entidade da entidade); void saventity (list <entity> entityList); Lista <S Entity> SearchEntity (String SearchContent);}TestServiceImpl.java
pacote com.hansonwang99.springboot_es_demo.service.impl; importar java.io.ioException; importar java.util.list; importar com.hansonwang99.springboot_es_demo.entity.memorto com.hansonwang99.springboot_es_demo.entity.mporto comb.hansonwang99.springBoot_es_entity.Imon; org.ellasticsearch.index.query.querybuilders; importar org.elasticsearch.search.builder.searchsourcebuilder; importar org.slf4j.logger; importação org.slf4j.loggerFactory; import org.springFramework.BeanS.Factory.Annotation.Atation.autation.anTation.autation; org.springframework.stereotype.service; importar io.searchbox.client.jestclient; importar io.searchbox.client.jestresult; importar io.searchbox.core.bulk; import io.searchbox.core.IndEx; import io.searchic.siceRex; Logger final estático Logger = LoggerFactory.getLogger (testServiceImpl.class); @Autowired private jestclient jestclient; @Override public void saventity (entidade entidade) {index index = new index.builder (entity) .index (entity.index_name) .type (entity.type) .build (); tente {jestclient.execute (index); Logger.info ("es insert completo"); } catch (ioexception e) {e.printStackTrace (); Logger.error (e.getMessage ()); }} / ** * Salvar conteúdo em lotes em es * / @Override public void saventity (list <entity> entityList) {volume.builder bulk = new Bulk.builder (); para (entidade entidade: entityList) {index Index = new index.builder (entity) .index (entity.index_name) .type (entity.type) .build (); Bulk.addaction (índice); } tente {jestclient.execute (Bulk.build ()); Logger.info ("es insert completo"); } catch (ioexception e) {e.printStackTrace (); Logger.error (e.getMessage ()); }} / *** Pesquise conteúdo em es* / @Override list public <Entity> searchentity (string searchContent) {searchSourceBuilder searchSourceBuilder = new SearchSourceBuilder (); //SearchSourceBuilder.Query(QueryBuilders.QueryStringQuery(searchContent); //searchSourceBuilder.field("name "); SearchSourceBuilder.Query (QueryBuilders.matchQuery ("Nome", SearchContent)); Pesquisa search = new search.builder (searchSourceBuilder.tostring ()) .adDindex (entity.index_name) .addtype (entity.type) .build (); tente {jestresult resultado = jestclient.execute (pesquisa); RESULTO RESULTO. } catch (ioexception e) {logger.error (e.getMessage ()); E.PrintStackTrace (); } retornar nulo; }} EntityController.java
pacote com.hansonwang99.springboot_es_demo.controller; importar java.util.ArrayList; importar java.util.list; importar com.hansonwang99.springboot_es_demo.entity.memorto com.hansonwang99.springBoot_es_demo.entity.mporto com.Hansonwang99.SpringBoot_es_Entity.Imon; org.apache.commons.lang.stringutils; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.bind.bind.requestation.requestmapping; importação; org.springframework.web.bind.annotation.restcontroller;@RestController@requestmapping ("/entityController") public Class EntityController {@AUTOWIRED TestService CityService; @RequestMapping (Value = "/Salvar", Method = requestMethod.get) public String Surf (longo id, nome da string) {System.out.println ("Salvar interface"); if (id> 0 && stringUtils.isnotEmpty (nome)) {entidade newentity = new entity (id, nome); Lista <Tentity> addList = new ArrayList <entity> (); addList.add (Newentity); CityService.Saveentity (Addlist); retornar "ok"; } else {retorna "Valor de entrada ruim"; }} @ReQuestMapping (value = "/search", método = requestmethod.get) list <entidade> salvar (nome da string) {list <entity> entityList = null; if (stringUtils.isnotEmpty (name)) {entityList = countyESService.searchentity (nome); } retornar entityList; }}Experimentos reais
Para adicionar vários dados, você pode usar a ferramenta Postman ou inseri -los diretamente no navegador, como adicionar os 5 dados a seguir:
http: // localhost: 6325/entityController/save? id = 1 & name = nanjing sol yat-sen mausoleum http: // localhost: 6325/entityController/save? id = 2 & name = nanjing University Normal na China HTTP: // LocalHost: Templo de confucio http: // localhost: 6325/entityController/save? Id = 4 & name = hangzhou também é muito bom http: // localhost: 6325/entitycontroller/salvar? Id = 5 & nome = parece que não há cidade chamada jing no sul da China.
O efeito de inserção de dados é o seguinte (usando o cabeçote de pesquisa do Elasticsearch Visual Plug-in):
Efeito de inserção de dados
Vamos fazer um teste de pesquisa: por exemplo, quero procurar a palavra -chave "Nanjing"
Digitamos no navegador:
http: // localhost: 6325/entityController/Search? name = nanjing
Os resultados da pesquisa são os seguintes:
Resultados da pesquisa para a palavra -chave "Nanjing"
Todos os quatro discos com a palavra -chave "Nanjing" inseridos agora foram pesquisados!
Obviamente, o método de segmentação de palavras padrão é usado aqui e cada chinês é usado como termo. Todos os registros que contêm a palavra -chave "Sul" e "Pequim" foram pesquisados, mas as pontuações são diferentes. Obviamente, existem outros métodos de segmentação de palavras. No momento, é necessário o suporte de outros plug-ins de segmentação de palavras. Isso não está coberto aqui, e eu o explorarei mais tarde.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.