学习思路:
elasticsearch本地安装
版本说明
代码解析
一、elasticsearch本地安装
1、elasticsearch6.8.4 下载 :https://www.elastic.co/cn/downloads/elasticsearch
如果想要下载指定版本,点击链接进去即可

2、配置
解压后,打开 config/elasticsearch.yml
,对其中两项配置进行修改
cluster.name
集群名称,随便填写,或者使用默认的“my-application”,注意,后面Java链接elasticsearch时,需要该配置。network.host
如果此不配置此项,其他机器无法链接当前elasticsearch。配置为:(0.0.0.0代表任何IP都可访问)启动
Mac/Linux:运行bin/elasticsearch
Windows:运行bin\elasticsearch.bat
3、analysis-ik 6.8.4 分词器安装
安装执行命令: bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.4/elasticsearch-analysis-ik-6.8.4.zip
如果下载太慢先运行:npm config set registry https://registry.npm.taobao.org
4、默认端口:9200是http访问端口;9300是tcp访问端口
二、版本说明
1. jdk1.8
2. elasticsearch 6.8.43. spring-boot:2.2.1;spring-cloud:Hoxton.RC2
三、代码分析
首先依赖jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>
代码结构非常简单

解释:
1、OrderDocument:类似于我们使用关系数据库时的实体对象,这里就是es里的文档概念
@Data@Document(indexName = "order",type ="order_info" )public class OrderDocument implements Serializable {@Idprivate Long id;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String desc;@Field(type = FieldType.Long)private Date createTime=new Date();@Field(type = FieldType.Long)private Date updateTime=new Date();}
indexName:索引名,类似于mysql的表概念;type:类型,类似于mysql表的概念;@id:类似于主键;
关于字段类型及其属性请参考《Elasticsearch数据类型及其属性》
这里我们用的是我们上面安装的ik分词器
2、OrderDocumentRepository:类似于dao
@Componentpublic interface OrderDocumentRepository extends ElasticsearchRepository<OrderDocument,Long> {}
Long:是我们上面定义对象的id类型
3、OrderEsService类似于我们平时写的服务类
@Service@Log4j2public class OrderEsService {@AutowiredOrderDocumentRepository orderDocumentRepository;@AutowiredElasticsearchTemplate elasticsearchTemplate;/*** 保持列表* @param orderDocuments*/public void save(List<OrderDocument> orderDocuments){elasticsearchTemplate.putMapping(OrderDocument.class);if (orderDocuments!=null && orderDocuments.size()>0){orderDocumentRepository.saveAll(orderDocuments).forEach(e->log.info("save======{}",JSON.toJSONString(e)));}}/*** 保持单个-包含新增修改* @param orderDocument*/public void save(OrderDocument orderDocument){if (orderDocument!=null && orderDocument.getId()!=null){log.info("save==={}",JSON.toJSONString(orderDocumentRepository.save(orderDocument)));}}/*** 按id查询* @param id*/public void getById(Long id){if (id!=null){orderDocumentRepository.findById(id).ifPresent(e->log.info("getById===={}",JSON.toJSONString(e)));}}/*** 按id删除* @param id*/public void deleteById(Long id){if (id!=null){orderDocumentRepository.deleteById(id);}}/*** elasticsearchTemplate实现分页查询* @param keyword 查询的关键字* @param pageIndex 开始页* @param pageNo 每页条数* @param fieldName 搜索的字段名称数组*/public void getByPage(String keyword,int pageIndex,int pageNo,String ... fieldName){QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyword, fieldName) // matchQuery(),单字段搜索.analyzer("ik_max_word").operator(Operator.OR);SearchQuery searchQuery=new NativeSearchQueryBuilder().withQuery(queryBuilder).withPageable(PageRequest.of(pageIndex,pageNo)).build();AggregatedPage<OrderDocument> orderDocuments = elasticsearchTemplate.queryForPage(searchQuery, OrderDocument.class);List<OrderDocument> collect = orderDocuments.get().collect(Collectors.toList());collect.forEach(e->log.info("getByPage====={}",JSON.toJSONString(e)));}/*** orderDocumentRepository实现分页查询* @param keyword* @param pageIndex* @param pageNo* @param fieldName*/public void get(String keyword,int pageIndex,int pageNo,String ... fieldName){QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyword, fieldName) // matchQuery(),单字段搜索.analyzer("ik_max_word").operator(Operator.OR);Page<OrderDocument> search = orderDocumentRepository.search(queryBuilder, PageRequest.of(pageIndex, pageNo));List<OrderDocument> collect = search.get().collect(Collectors.toList());collect.forEach(e->log.info("get====={}",JSON.toJSONString(e)));}/*** 删除索引下的所有数据*/public void deleteAll(){orderDocumentRepository.deleteAll();}}
4、application.yml配置
# elasticsearch.yml 文件中的 cluster.namespring:data:elasticsearch:clusterName: my-application# elasticsearch 调用地址,多个使用“,”隔开clusterNodes: localhost:9300
5、OrderEsServiceTest:测试类
文中代码地址:https://gitee.com/carpentor/spring-cloud-example/tree/master/elasticsearch
如果想要了解elasticsearch更多原理细节,请查看历史文章,或关注公众号




