『 热烈的爱情到订婚早已是定点,婚一结一切了结。现在订了婚,彼此间还留着情感发展的余地,这是桩好事。- 《我们仨》 』
<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 」欢迎转载,保留摘要,谢谢!