springdata -----操作ES
一:配置springdata-Es
elasticseach-JPA.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd
http://www.springframework.org/schema/data/elasticsearch
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd
">
<context:component-scan base-package="com.sf.heros.mq.consumer"/> 扫描包
<elasticsearch:transport-client id="client" cluster-name="elasticsearch"
cluster-nodes="127.0.0.1:9300" client-transport-sniff="false"/> 配置链接端口(默认的是9200,但是我们需要与之交互,要用到配置文件里所写那个端口,我的是9300)
<elasticsearch:repositories base-package="com.sf.heros.mq.consumer.dao" springdata操作ES的 接口类
elasticsearch-template-ref="elasticsearchTemplate"/>
<bean name="elasticsearchTemplate"
class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client" /> ES操作类
</bean> </beans> 2:接口类
UserDao。java(增删改查方法 与其它springdata一致,findBy等等语法参考springdata)
public interface UserDao extends ElasticsearchRepository<User,Integer> {
List<User> findByArticleInfId(Integer aid);
} 3:实体类
@Document(indexName = "article_inf_index", type = "articleInf")
@Setting(settingPath = "elasticsearch-analyser.json")
public class User implements Serializable {
//elasticsearch
@org.springframework.data.annotation.Id
private Integer articleInfId; @Field(type = FieldType.String)//使用ngram进行单字分词
private String articleTitle; @Field(type = FieldType.Date, store = true, format = DateFormat.custom, pattern ="yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd HH:mm:ss")
private Date releaseTime; public Integer getArticleInfId() {
return articleInfId;
} public void setArticleInfId(Integer articleInfId) {
this.articleInfId = articleInfId;
} public String getArticleTitle() {
return articleTitle;
} public void setArticleTitle(String articleTitle) {
this.articleTitle = articleTitle;
} public Date getReleaseTime() {
return releaseTime;
} public void setReleaseTime(Date releaseTime) {
this.releaseTime = releaseTime;
} @Override
public String toString() {
return "User{" +
"articleInfId=" + articleInfId +
", articleTitle='" + articleTitle + '\'' +
", releaseTime=" + releaseTime +
'}';
}
} 4:serverce
@Service("testService")
public class ElasticsearchService {
@Autowired
private UserDao userDao;
public void add(User user){
userDao.save(user);
} public List<User> search(Integer aid){
Pageable pageable=new Pageable() {
@Override
public int getNumberOfPages() {
return 0;
} @Override
public PageFormat getPageFormat(int pageIndex) throws IndexOutOfBoundsException {
return null;
} @Override
public Printable getPrintable(int pageIndex) throws IndexOutOfBoundsException {
return null;
}
};
return this.userDao.findByArticleInfId(aid);
}
public User searchByQuery(User user){
BoolQueryBuilder qb= QueryBuilders. boolQuery();
qb.must(QueryBuilders.matchQuery("articleInfId",12));
Iterable<User> search = userDao.search(qb);
return search.iterator().next();
}
}
BoolQueryBuilder方法:
1.matchAllQuery() matchAllQuery()方法用来匹配全部文档
2.matchQuery("filedname","value")匹配单个字段,匹配字段名为filedname,值为value的文档
3.multiMatchQuery(Object text, String... fieldNames)多个字段匹配某一个值
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("music", "name", "interest");//搜索name中或interest中包含有music的文档(必须与music一致)
4.wildcardQuery()模糊查询 ?匹配单个字符,*匹配多个字符
5.使用BoolQueryBuilder进行复合查询
使用must:
- //模糊查询
- WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(
- "name", "*jack*");//搜索名字中含有jack的文档
- WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(
- "interest", "*read*");//搜索interest中含有read的文档
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- //name中必须含有jack,interest中必须含有read,相当于and
- boolQueryBuilder.must(queryBuilder1);
- boolQueryBuilder.must(queryBuilder2);
使用 should:
- WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(
- "name", "*jack*");//搜索名字中含有jack的文档
- WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(
- "interest", "*read*");//搜索interest中含有read的文档
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- //name中含有jack或者interest含有read,相当于or
- boolQueryBuilder.should(queryBuilder1);
- boolQueryBuilder.should(queryBuilder2);
springdata -----操作ES的更多相关文章
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703679.html ------------------------------------ ...
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7704914.html ------------------------------------ ...
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7718741.html ------------------------------------ ...
- JPA + SpringData 操作数据库 ---- 深入了解 SpringData
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...
- Elasticsearch笔记五之java操作es
Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...
- SpringBoot整合SpringDataElasticSearch操作ES
(1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- SpringBoot整合Jest操作ES
(1).添加依赖 <dependency> <groupId>io.searchbox</groupId> <artifactId>jest</a ...
- SpringBoot操作ES进行各种高级查询
SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ES 依赖.在项目中直接引用 es-starter 的话会报容器初始化异常错误,导 ...
- 07_Kibana界面操作ES
Kibana界面的API操作ES 1.创建索引 1.1 指定分片数量和备份数量 1.2 创建默认 2. 查看索引 2.1 查看单个索引设置 2.2 查看所有索引设置 3.文档管理 3.1 添加文档 3 ...
随机推荐
- PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- 操作系统-百科: UNIX
ylbtech-操作系统-百科: UNIX UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.De ...
- (转)CentOS 7安装Zabbix 3.4
(转)Zabbix 3.4 支持Centos 7.貌似不支持6.9. 更多详细内容请参考官方说明文档,详细的安装要求不贴出来了. https://www.zabbix.com/documentatio ...
- 01:Sysbench 基准压测 IO篇
line:V1.1 mail: gczheng@139.com date: 2017-11-17 一.Sysench测试前准备 1.1.压测环境 配置 信息 主机 Dell PowerEdge R73 ...
- Ajax显示隐藏
$(function(){ $('#search').click(function(){ if($(".search_div").is(":visible")) ...
- django之jquery完成ajax
使用Ajax 使用视图通过上下文向模板中传递数据,需要先加载完成模板的静态页面,再执行模型代码,生成最张的html,返回给浏览器,这个过程将页面与数据集成到了一起,扩展性差 改进方案:通过ajax的方 ...
- Pandas透视表处理数据(转)
手把手教你用Pandas透视表处理数据(附学习资料) 2018-01-06 数据派THU 来源:伯乐在线 - PyPer 本文共2203字,建议阅读5分钟.本文重点解释pandas中的函数pivot ...
- ELK-Stack 最后一次全篇文档
简介: ELK-Stack 日志收集系统.最后一次全篇记录的笔记,之后关于 ELK 的笔记都将是片段型.针对性的. 环境介绍: ELK-Stack:192.168.1.25 ( Redis.LogS ...
- Linux 登陆提示文字
/etc/issue是从本地登陆显示的信息 /etc/issue.net是从网络登陆显示的信息 /etc/motd内容由系统管理员确定,常用于通告信息,如计划关机时间的警告等 每次用户登录时,/etc ...
- 关于Excel无法打开,因为文件格式或文件扩展名无效的解决方法
可能有网友也遇到过跟我一样的情况,新建的excel一打开就弹出 这样的错误. 这是因为excel打开的时候会去指定的文件夹找一个模板,以这个模板的样式打开新建的ecxel.所以如果excel打开的时候 ...