天天看点

深入浅出 spring-data-elasticsearch - 实战案例详解(四)

『  热烈的爱情到订婚早已是定点,婚一结一切了结。现在订了婚,彼此间还留着情感发展的余地,这是桩好事。- 《我们仨》 』

<b>「系列文章」</b>

<a href="http://spring4all.com/article/25">深入浅出 spring-data-elasticsearch - elasticsearch 架构初探(一)</a>

<a href="http://spring4all.com/article/41">深入浅出 spring-data-elasticsearch - 概述(二)</a>

<a href="">深入浅出 spring-data-elasticsearch - 基本案例详解(三)</a>

<a href="http://spring4all.com/article/78">深入浅出 spring-data-elasticsearch - 实战案例详解(四)</a>

深入浅出 spring-data-elasticsearch - 架构原理以及源码浅析(五)(拼命编写ing)

运行环境:jdk 7 或 8,maven 3.0+

技术栈:springboot 1.5+, spring data elasticsearch 1.5+ ,elasticsearch 2.3.2

本文提纲

一、搜索实战场景需求

二、运行 spring-data-elasticsearch-query 工程

三、spring-data-elasticsearch-query 工程代码详解

搜索的场景会很多,常用的搜索场景,需要搜索的字段很多,但每个字段匹配到后所占的权重又不同。比如电商网站的搜索,搜到商品名称和商品描述,自然商品名称的权重远远大于商品描述。而且单词匹配肯定不如短语匹配。这样就出现了新的需求,如何确定这些短语,即自然分词。那就利用分词器,即可得到所需要的短语,然后进行搜索。

下面介绍短语如何进行按权重分匹配搜索。

1. 后台起守护线程启动 elasticsearch

下面开始运行工程步骤(quick start):

2. 项目结构介绍

本地启动的 es ,就不需要改配置文件了。如果连测试 es 服务地址,需要修改相应配置

3.编译工程

在项目根目录 spring-data-elasticsearch-query,运行 maven 指令:

4.运行工程

右键运行 application 应用启动类(位置:org/spring/springboot/application.java)的 main 函数,这样就成功启动了 spring-data-elasticsearch-query 案例。

用 postman 工具新增两个城市

a. 新增城市信息

下面是实战搜索语句的接口:

获取返回结果:

返回 json 如下:

应用的控制台中,日志打印出查询语句的 dsl :

三、spring-data-elasticsearch-query 工程代码详解

1.pom.xml 依赖

2. application.properties 配置 es 地址

默认 9300 是 java 客户端的端口。9200 是支持 restful http 的接口。

更多配置:

 spring.data.elasticsearch.cluster-name elasticsearch    集群名。(默认值: elasticsearch)

 spring.data.elasticsearch.cluster-nodes    集群节点地址列表,用逗号分隔。如果没有指定,就启动一个客户端节点。

 spring.data.elasticsearch.propertie     用来配置客户端的额外属性。

 spring.data.elasticsearch.repositories.enabled     开启 elasticsearch 仓库。(默认值:true。)

3. es 数据操作层

接口只要继承 elasticsearchrepository 接口类即可,具体使用的是该接口的方法:

4. 实体类

注意

a. city 属性名不支持驼峰式。

b. indexname 配置必须是全部小写,不然会出异常。

org.elasticsearch.indices.invalidindexnameexception: invalid index name [provinceindex], must be lowercase

5. 城市 es 业务逻辑实现类

代码如下:

可以看到该过程实现了,短语精准匹配以及匹配到根据字段权重分求和,从而实现按权重搜索查询。代码流程如下:

- 权重分查询

- 短语匹配

- 设置权重分最小值

- 设置分页参数

注意:

- 字段对应权重分设置,可以优化成 enum

- 由于无相关性的分值默认为 1 ,设置权重分最小值为 10

四、小结

elasticsearch 还提供很多高级的搜索功能。这里提供下需要经常逛的相关网站:

摘要: 原创出处 www.bysocket.com 「泥瓦匠bysocket 」欢迎转载,保留摘要,谢谢!