时间:2021-05-19
实验环境
首先当然需要安装好elastic search环境,最好再安装上可视化插件 elasticsearch-head来便于我们直观地查看数据。
当然这部分可以参考本人的帖子: 《centos7上elastic search安装填坑记》
我的ES安装在http://113.209.119.170:9200/这个地址(该地址需要配到springboot项目中去)
Spring工程创建
这部分没有特殊要交代的,但有几个注意点一定要当心
注意在新建项目时记得勾选web和NoSQL中的Elasticsearch依赖,来张图说明一下吧:
创建工程时勾选Nosql中的es依赖选项
项目自动生成以后pom.xml中会自动添加spring-boot-starter-data-elasticsearch的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>本项目中我们使用开源的基于restful的es java客户端jest,所以还需要在pom.xml中添加jest依赖:
除此之外还必须添加jna的依赖:
否则启动spring项目的时候会报JNA not found. native methods will be disabled.的错误:
JNA not found. native methods will be disabled.
项目的配置文件application.yml中需要把es服务器地址配置对
代码组织
我的项目代码组织如下:
项目代码组织
各部分代码详解如下,注释都有:
Entity.java
TestService.java
TestServiceImpl.java
package com.hansonwang99.springboot_es_demo.service.impl;import java.io.IOException;import java.util.List;import com.hansonwang99.springboot_es_demo.entity.Entity;import com.hansonwang99.springboot_es_demo.service.TestService;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import io.searchbox.client.JestClient;import io.searchbox.client.JestResult;import io.searchbox.core.Bulk;import io.searchbox.core.Index;import io.searchbox.core.Search;@Servicepublic class TestServiceImpl implements TestService { private static final Logger LOGGER = LoggerFactory.getLogger(TestServiceImpl.class); @Autowired private JestClient jestClient; @Override public void saveEntity(Entity entity) { Index index = new Index.Builder(entity).index(Entity.INDEX_NAME).type(Entity.TYPE).build(); try { jestClient.execute(index); LOGGER.info("ES 插入完成"); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage()); } } /** * 批量保存内容到ES */ @Override public void saveEntity(List<Entity> entityList) { Bulk.Builder bulk = new Bulk.Builder(); for(Entity entity : entityList) { Index index = new Index.Builder(entity).index(Entity.INDEX_NAME).type(Entity.TYPE).build(); bulk.addAction(index); } try { jestClient.execute(bulk.build()); LOGGER.info("ES 插入完成"); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage()); } } /** * 在ES中搜索内容 */ @Override public List<Entity> searchEntity(String searchContent){ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //searchSourceBuilder.query(QueryBuilders.queryStringQuery(searchContent)); //searchSourceBuilder.field("name"); searchSourceBuilder.query(QueryBuilders.matchQuery("name",searchContent)); Search search = new Search.Builder(searchSourceBuilder.toString()) .addIndex(Entity.INDEX_NAME).addType(Entity.TYPE).build(); try { JestResult result = jestClient.execute(search); return result.getSourceAsObjectList(Entity.class); } catch (IOException e) { LOGGER.error(e.getMessage()); e.printStackTrace(); } return null; }}EntityController.java
实际实验
增加几条数据,可以使用postman工具,也可以直接在浏览器中输入,如增加以下5条数据:
http://localhost:6325/entityController/save?id=1&name=南京中山陵http://localhost:6325/entityController/save?id=2&name=中国南京师范大学http://localhost:6325/entityController/save?id=3&name=南京夫子庙http://localhost:6325/entityController/save?id=4&name=杭州也非常不错http://localhost:6325/entityController/save?id=5&name=中国南边好像没有叫带京字的城市了数据插入效果如下(使用可视化插件elasticsearch-head观看):
数据插入效果
我们来做一下搜索的测试:例如我要搜索关键字“南京”
我们在浏览器中输入:
http://localhost:6325/entityController/search?name=南京
搜索结果如下:
关键字“南京”的搜索结果
刚才插入的5条记录中包含关键字“南京”的四条记录均被搜索出来了!
当然这里用的是standard分词方式,将每个中文都作为了一个term,凡是包含“南”、“京”关键字的记录都被搜索了出来,只是评分不同而已,当然还有其他的一些分词方式,此时需要其他分词插件的支持,此处暂不涉及,后文中再做探索。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
  你知道搜索引擎优化是什么吗?  SEO(搜索引擎优化)是通过搜索引擎的自然搜索结果优化要发现的内容的实践。如何优化S
所谓搜索引擎优化(搜索引擎优化),搜索引擎是搜索的功能的Web搜索引擎的检索原则(即网站设计的各种搜索引擎友好),从而获得在搜索引擎排名前在各种行为。搜索引擎优
在搜索引擎优化的日常工作中,标题优化是检验页面标题是否满足搜索引擎需求的一个常见过程。然而,在实践中,我们偶尔会遇到一些新手SEO,这是相对模糊的。例如:通过修
在搜索实践中还会涌现出新的问题,产生新的关键词选择原则及更多的经验技巧。学会对关键词分析与处理的常用知识,也会加深我们对搜索引擎的理解,能让我们从搜索引擎获得更
seo是什么?在搜索引擎上搜索相关知识后,一般都会给出这样的答案。SEO网站快速排名是一种优化,使其在搜索引擎的自然搜索结果页面上排名具有局部的实践技巧。也就是