SpringMVC项目使用elastic search搜索
项目需要,引入了elastic search(后续简称es),后面将介绍本地对es的安装,使用以及java连接es查询的整个过程。
1、es索引字段建立与修改,以curl新增一个索引字段示例
curl -X PUT \
http://127.0.0.1:9200/idx_your_entity/_mapping/your_entity \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 326dd921-4f7e-498b-866a-2de5173a908f' \
-H 'cache-control: no-cache' \
-d '{
"properties": {
"is_enable":{
"type":"integer"
}
}
}
2、使用logstash向es里面增量推数据,需要有update_date字段
input {
jdbc {
jdbc_driver_library => "D:/logstash-6.7.1/lib/sqljdbc4.jar"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_connection_string => "jdbc:sqlserver://database_link;DatabaseName=HIM_bak;"
jdbc_user => "username"
jdbc_password => "password"
schedule => "* * * * *"
jdbc_default_timezone => "Asia/Shanghai"
use_column_value => false
tracking_column => "update_date"
statement => "select
[fields you need]
from table WHERE update_date > :sql_last_value"
}
}
output {
elasticsearch {
index => "idx_workhelp"
document_type => "workhelp"
document_id => "%{helpno}"
hosts => ["127.0.0.1:9200"]
}
}
3、es查询jar包,pom配置
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.7.1</version>
</dependency>
4、es数据源,查询client配置
@Bean
public TransportClient client() throws Exception {
// init client
TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), port);
Settings settings = Settings.builder().put("cluster.name", nodeName).build();
client = new PreBuiltTransportClient(settings);
client.addTransportAddress(transportAddress);
logger.info("use es and elastic search connect successful");
return client;
}
5、es查询条件的构建:这里介绍两种查询条件的构建,must表示且,should表示或;同时用到了两种匹配方式:termQuery代表完全匹配,配合索引类型 keywords 使用,matchQuery代表模糊匹配,配合text使用。
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//示例 A=a and B like %b% and (C like %c% or D like %d%)
boolQueryBuilder.filter(QueryBuilders.termQuery(fieldA, a));
boolQueryBuilder.must(QueryBuilders.matchQuery(fieldB, b));
boolQueryBuilder.must(
QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery(fieldC, c))
.should(QueryBuilders.matchQuery(fieldD, d)));
6、设置关键词高亮显示
highlightBuilder.preTags("<span class='highLight'>");
highlightBuilder.postTags("</span>");
highlightBuilder.field(field);
7、把条件带入并且执行查询,hits即查询结构,需要的数据类型SearchHits结构不复杂,这里不再赘叙。
SearchRequestBuilder searchRequestBuilder = client
.prepareSearch(INDEX)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(boolQueryBuilder);
searchRequestBuilder.highlighter(problemDescHiBuilder);
// 分页
searchRequestBuilder.setFrom(startIndex);
searchRequestBuilder.setSize(pageSize);
// 排序
searchRequestBuilder
.addSort(SortBuilders.fieldSort(CREATEDATE))
.addSort(SortBuilders.fieldSort(READCOUNT)
.order(SortOrder.DESC));
SearchResponse response = searchRequestBuilder.get();
SearchHits hits = searchRequestBuilder.get().getHits();
8、查询结果。查询结果即对SearchHits进行处理,转化为自己项目的视图对象,一般为 业务实体VO 的命名方式进行表达,传到控制层。
9、最后:写到这里,大家有问题可以联系我共同学习探讨~
SpringMVC项目使用elastic search搜索的更多相关文章
- Elastic Search对Document的搜索
在ES中使用的重点.ES中存储的数据.核心就是为了提供全文搜索能力的.搜索功能非常重要.多练. 1 query string searchsearch的参数都是类似http请求头中的字符串参数提供搜索 ...
- 教你用Elastic Search:运行第一条Hello World搜索命令
摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...
- Elastic Search 上市了,市值翻倍,这群人财务自由了!
国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分 ...
- Elastic Search快速上手(1):简介及安装配置
前言 最近开始尝试学习Elastic Search,因此决定做一些简单的整理,以供后续参考,快速上手使用ES. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多 ...
- elastic search&logstash&kibana 学习历程(一)es基础环境的搭建
elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...
- elastic search book [ ElasticSearch book es book]
谁在使用ELK 维基百科, github都使用 ELK (ElasticSearch es book) ElasticSearch入门 Elasticsearch入门,这一篇就够了==>http ...
- 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》
本文作为Elastic search系列的开篇之作,简要介绍其简要历史.安装及基本概念和核心模块. 简史 Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索 ...
- 使用Eclipse构建Maven的SpringMVC项目
一.直接建立Maven项目方法1.建立Maven项目 接下来使用Eclipse的maven构建一个web项目,以构建SpringMVC项目为例: 1.1 选择建立Maven Project 选择Fil ...
- Eclipse中使用Maven新建 Servlet 2.5的 SpringMVC项目
1.前言: 最近在学习SpringMVC框架,由于使用Eclipse创建的webAPP项目默认使用的还是比较旧的servlet2.3,而且默认使用的还是JDK1.5,所以便有一次开始了我的配置之路 2 ...
随机推荐
- iptables (二) nat & tcp_wrapper
一.nat 之前网络防火墙的示例中,如果内网是私网地址,那么内网主机如何与外网通信呢? 这时候,iptables要实现内网和外网通信,有两种方式: nat: Network Address Trans ...
- json转义处理
php把参数转成json字符串,中文会变成unicode,有部分会自动转义(添加反斜杠\) json_encode() #中文不转义对应的数字 256) json_encode($data,JSON_ ...
- 多线程模式下高并发的环境中唯一确保单例模式---DLC双端锁
DLC双端锁,CAS,ABA问题 一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会 ...
- C++ STL:next_permutation和prev_permutation
两个函数都在#include <algorithm>里 顾名思义,next_permutation用来求下一个排列,prev_permutation用来求上一个排列. 当前的排列不满足函数 ...
- PAT (Basic Level) Practice (中文)1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...
- mysql 基础sql语法总结(一)DDL
mysql数据库: SQL数据库语言可分为四部分: 1.DDL:对数据库或表的进行操作结构操作 2.DML:对表的记录进行更新(增.删.改)* 3.DQL:对表的内容进行查询 **(重难点) 4.DC ...
- vue自学入门-7(vue style scope)
vue自学入门-1(Windows下搭建vue环境) vue自学入门-2(vue创建项目) vue自学入门-3(vue第一个例子) vue自学入门-4(vue slot) vue自学入门-5(vuex ...
- 摇一摇—微信7.0.8版本audio无法自动播放问题
近日有一个项目出现audio无法自动播放,查看原因才发现是微信版本更新为7.0.8版本,需要有交互行为,第一次播放需要用户手动点击一下,无法使用DOM中的play()进行直接播放操作,那怎么办呢? 通 ...
- pip问题:Traceback (most recent call last): File "/usr/bin/pip", line 9, in
源作者blog https://blog.csdn.net/vmxhc1314/article/details/81869676 编辑提示的文件,进行更改即可. 解决方法: 将 /usr/bin/pi ...
- ECMAScript基本语法——⑤运算符 逻辑运算符
&&与,会短路:左边为false右边就不参与运算||或,会短路:左边为true右边就不参与运算!非, 注意:在JavaScript中,如果运算数不是运算符要求的类型,那么JavaScr ...