项目需要,引入了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搜索的更多相关文章

  1. Elastic Search对Document的搜索

    在ES中使用的重点.ES中存储的数据.核心就是为了提供全文搜索能力的.搜索功能非常重要.多练. 1 query string searchsearch的参数都是类似http请求头中的字符串参数提供搜索 ...

  2. 教你用Elastic Search:运行第一条Hello World搜索命令

    摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...

  3. Elastic Search 上市了,市值翻倍,这群人财务自由了!

    国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分 ...

  4. Elastic Search快速上手(1):简介及安装配置

    前言 最近开始尝试学习Elastic Search,因此决定做一些简单的整理,以供后续参考,快速上手使用ES. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多 ...

  5. elastic search&logstash&kibana 学习历程(一)es基础环境的搭建

    elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...

  6. elastic search book [ ElasticSearch book es book]

    谁在使用ELK 维基百科, github都使用 ELK (ElasticSearch es book) ElasticSearch入门 Elasticsearch入门,这一篇就够了==>http ...

  7. 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》

    本文作为Elastic search系列的开篇之作,简要介绍其简要历史.安装及基本概念和核心模块. 简史 Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索 ...

  8. 使用Eclipse构建Maven的SpringMVC项目

    一.直接建立Maven项目方法1.建立Maven项目 接下来使用Eclipse的maven构建一个web项目,以构建SpringMVC项目为例: 1.1 选择建立Maven Project 选择Fil ...

  9. Eclipse中使用Maven新建 Servlet 2.5的 SpringMVC项目

    1.前言: 最近在学习SpringMVC框架,由于使用Eclipse创建的webAPP项目默认使用的还是比较旧的servlet2.3,而且默认使用的还是JDK1.5,所以便有一次开始了我的配置之路 2 ...

随机推荐

  1. Selenium实战(二)——调用JavaScript之execute_script()方法

    1.浏览器滚动条的拖动,不能依靠WebDriver提供的API来实现,用于调整浏览器滚动条位置的JavaScript代码如下: window.scrollTo(0,450); window.scrol ...

  2. [ERR] Node goodsleep.vip:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

    解决方案 以前的cluster节点信息 保留 要删除 dump.rdb node.conf集群启动时自动生成文件

  3. z3学习档案

    Reference: 看雪-z3巧解逆向 知乎:Z3一把梭 z3 solver学习 使用z3约束求解器解决CTF中的题目 Playing with Z3,hacking the serial chec ...

  4. Dubbo服务暴露分析

    Dubbo的服务暴露是一个重要的特性,了解其机制很重要.之前有很多人写了有关的源代码分析,在本文中不再重新分析.官方文档中的一篇写的就很好,本文主要是有关内容进行补充与总结. 传送门:服务导出 为什么 ...

  5. ECMAScript基本语法——⑤运算符 三元运算符

    ?: 简化ifelse的操作

  6. 844. 走迷宫(bfs模板)

    给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁. 最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上.下.左.右任意一个方向移 ...

  7. Vue中axios有关请求头的几点小结

    在Vue前端中向后端发起http请求会有着两种写法:一种是在vue文件中直接导入axios模板,另外一种是使用Vue的属性$http. 1.在第一种方式中,在同一个工程中所添加的vue文件直接使用ax ...

  8. CTF中压缩文件的常见解法

    此篇记录两篇记录的比较好的关于压缩文件破解的总结 链接:https://blog.csdn.net/xuqi7/article/details/71437882 https://blog.csdn.n ...

  9. 1.mysql卸载重新安装问题

    前言:在开发过程中,MySQL数据库是很频繁使用的数据库,但是有时候,数据库一单出错,或者其他原因,想要重装数据库,难免会遇到MySQL重装之后服务启不来,,下面我就跟大家讨论下如何干净的卸载MySQ ...

  10. 机器学习作业(三)多类别分类与神经网络——Matlab实现

    题目太长了!下载地址[传送门] 第1题 简述:识别图片上的数字. 第1步:读取数据文件: %% Setup the parameters you will use for this part of t ...