es基础用法

1、简介:

Elasticsearch
是一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建,可以用于全文搜索,结构化搜索以及近实时分析。可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架。 说明:
Lucene:只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene,学习成本高,Lucene确实非常复杂。
Elasticsearch 是 面向文档型数据库,这意味着它存储的是整个对象或者 文档,它不但会存储它们,还会为他们建立索引,这样你就可以搜索他们了

Es的增删改查

导入数据到es前需要的配置代码

Settings settings = Settings

.settingsBuilder()

.put("cluster.name", "new_gjjqyxy")  //集群名称

.put("client.transport.sniff",true)

.build();

InetSocketTransportAddress transportAddress= new InetSocketTransportAddress

(InetAddress.getByName("172.22.21.21"),9300);//es所在的服务器和端口

Client  client =TransportClient.builder().settings(settings).build().

addTransportAddresses(transportAddresses);

BulkRequestBuilder bulkRequest =client.prepareBulk();

(附:需要导入相应的jar包以及jdk1.7以上,需要写在try catch)

增和改

对于增加和修改,如果提供“主键id”那么执行的操作是一样的,增加可以提供id也可以不提供,这里推荐提供,这样方便修改。对于修改,就像提供id的增加的操作一样,es会根据你提供的id来修改该id对应的数据。

代码如下:

Map<String,Object> map=newHashMap<String,Object>();

bulkRequest.add(client.prepareIndex("12315_charts_test","type","finzjid") .setSource(

getXContentBuilderAnother(map)

)

);//12315_charts_test为索引名称

// type为类型

//finzjid为数据的主键id

// map为一条数据,存放在map中

BulkResponse bulkResponse =bulkRequest.execute().actionGet();

int errorCount = 0;

if (bulkResponse.hasFailures()) {

//处理错误

for(BulkItemResponse itemResponse : bulkResponse) {

if(itemResponse.isFailed()) {

++errorCount;

}

}

}

bulkRequest.request().requests().clear();

public static XContentBuildergetXContentBuilderAnother(Map map) throws IOException {

Setset = map.keySet();

inta=set.size();

Iteratoriterator=set.iterator();

XContentBuilderxcb = XContentFactory.jsonBuilder().startObject();

while(iterator.hasNext()){

XContentBuilderxcbtemp=null;

String key = (String) iterator.next();

Objectvalue = map.get(key);

xcbtemp=xcb.field(key,tmp);

xcb=xcbtemp;

}

returnxcb.endObject();

}

bulkRequest.add(client.prepareDelete("12315_charts_test"," type ", id).request());//id为待删除数据的主键

BulkResponse bulkResponse =bulkRequest.get();

if (bulkResponse.hasFailures()) {

for(BulkItemResponse item :bulkResponse.getItems()){

System.out.println(item.getFailureMessage());

}

}else {

System.out.println("deleteok");

}

一:查询条件的设置

//最终条件

BoolQueryBuildermustFilter = QueryBuilders.boolQuery();

1.//对于某字段的范围查询

RangeQueryBuilder rangeQueryBuilder =QueryBuilders.

rangeQuery("REGTIME");//REGTIME为long型字段,查询该字段的一个范围

rangeQueryBuilder.from(starttime);//开始边界

rangeQueryBuilder.to(endtime);//结束边界

rangeQueryBuilder.includeLower(true);

rangeQueryBuilder.includeUpper(true);

mustFilter.must(rangeQueryBuilder);//must相当and,should相当于 or

2.//对于某字段中值得限定查询

mustFilter.must(QueryBuilders.termQuery(SearchEntity.P_BUIS_TYPE,model.getBusitype()));

//第一个参数SearchEntity.P_BUIS_TYPE填写es上的字段名

//第二个参数model.getBusitype()填写第一个参数字段限定的值

// termQuery相当于等于的含义

// matchPhraseQuery 短语匹配,字段里面的值含有该短语就符合条件

// matchQuery 字段中有传入短语里面的那些字(按照短语顺序) 即符合条件

// matchPhrasePrefixQuery  字段中短语匹配且短语在开头

3.//对于一个字段里面匹配多个值

BoolQueryBuilder mustFiltertemp =QueryBuilders.boolQuery();

mustFiltertemp.should(QueryBuilders.matchPhraseQuery(SearchEntity.TABLE_COL,table1));//参照2所述

mustFiltertemp.should(QueryBuilders.matchPhraseQuery(SearchEntity.TABLE_COL,table2)); //参照2所述

mustFilter.must(mustFiltertemp);//最后把子条件添加到最终条件里

二:查询数据

//得到上面的BoolQueryBuilder mustFilter(查询条件)然后开始查询

String[] sss=types.split(",");

SearchRequestBuilder searchRequestBuilder =client.

prepareSearch(INDEX_GS12315).setTypes(sss);

//这里INDEX_GS12315为你所查的索引名称,sss是type,可以是多个

searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);

if(mustQuery!=null)searchRequestBuilder.setQuery(mustQuery);

searchRequestBuilder.

setFrom((page.getPageNo() - 1) *page.getPageSize()).

setSize(page.getPageSize());

//(page.getPageNo() - 1) * page.getPageSize()参数页数-1和页大小的乘积

// page.getPageSize()参数为页大小,这里自己定义传入

SearchResponse searchResponse =searchRequestBuilder.execute().

actionGet();

SearchHits hits = searchResponse.getHits();

// hits这是返回结果,可以自定义一个pager 将所需要的结果都放入相应的属性中

long num=hits.getTotalHits();

// num是符合条件的查询结果总数

//存放结果的链表,SearchEntity自定义的结果类,里面包含es上所有字段名

List<SearchEntity> list = newArrayList<SearchEntity>();

for (SearchHit hit : searchHists) {

SearchEntityb = convert2SearchInfo(hit);

Stringid=hit.getId();

Stringtype=hit.getType();

b.setId(id);

b.setType(type);

list.add(b);

}

//将es返回的一条结果转化为我们自定义的实体类

private static SearchEntityconvert2SearchInfo(SearchHit hit) {

String json = hit.getSourceAsString();

// 将json串值转换成对应的实体对象

//  SearchEntityb = JsonUtil.decode(json, SearchEntity.class);

//SearchEntity b =new SearchEntity();

JSONObjectjsontemp=JSONObject.fromObject(json);

SearchEntity b = (SearchEntity)jsontemp.

toBean(jsontemp,SearchEntity.class);

returnb;

}

//得到上面的list,就相当于得到的查询结果,这里的结果返回的条数是你自己定义的页大小和页号,不设置页大小和页号默认值为第1页的10条数据

三:分组查询

对es中的某个字段分组,并找出分组后数量排名靠前的字段的值

String[] sss=types.split(",");

// INDEX_GS12315参数是索引名称,sss是对哪些类型进行操作

SearchRequestBuilder searchRequestBuilder =client.

prepareSearch(INDEX_GS12315).setTypes(sss);

//对_score字段按照降序排列

searchRequestBuilder.addSort(SortBuilders.fieldSort("_score").order(SortOrder.DESC));

searchRequestBuilder.setSearchType(SearchType.COUNT);

//col参数是分组的列名称,size是返回数量排名前多少的分组值

//当size为0时全部返回,size默认为10(如果不设置size的话)

TermsBuilder busitypeTermsBuilder = AggregationBuilders.terms(col).

field(col).size(size);

searchRequestBuilder.addAggregation(busitypeTermsBuilder);

//设置分组的条件

if(mustFilter!=null)searchRequestBuilder.setQuery(mustFilter);

searchRequestBuilder.setFrom(0).setSize(10000);

SearchResponse sr =searchRequestBuilder.execute().actionGet();

//返回的结果

Map<String, Aggregation> aggMap =sr.getAggregations().asMap();

//得到col列的返回结果,然后将分组结果放到dataMap中

Terms terms = sr.getAggregations().get(col);

Collection<Terms.Bucket> buckets =terms.getBuckets();

Map<String, String> dataMap = newHashMap<String, String>();

for (Terms.Bucket bucket : buckets) {

Stringkey = (String) bucket.getKey();

dataMap.put(key,bucket.getDocCount() + "");

}

dataMap就是分组后的列的值和该值得数量

时间: 2024-07-28 22:06:25

es基础用法的相关文章

sass基础用法

sass基础用法 SASS是什么 传统的CSS是一种单纯的描述性样式文件,然而SASS可以对CSS进行预编译处理. 在SASS源码中可以使用变量.函数.继承等动态语言的特性,并且可以编译成CSS文件. 安装与使用 安装 由于sass是ruby写的,所以想要使用sass就需要安装ruby环境.然后再使用gem安装sass. 输入下面的命令进行安装sass: gem install sass 可以使用sass -v命令查看sass的版本. 使用 新建一个后缀名为.scss源码文件,就可以编辑sass

游标基础用法

Create PROCEDURE P_InsertSubject@SubjectId intASDECLARE rs CURSOR LOCAL SCROLL FORselect studentid from student where StudentGradu = 1OPEN rsFETCH NEXT FROM rs INTO @tempStudentIDWHILE @@FETCH_STATUS = 0BEGINInsert SelSubject values (@SubjectId,@temp

Cocos数据篇[3.4](6) ——SQLite3数据库基础用法

[唠叨] 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用 SQLite数据库 存储数据.SQLite 是使用非常广泛的 嵌入式数据库 ,它有小巧 .高效.跨平台.开源免费和易操作的特点.所以大量的被用于手机.PDA.MP3播放器.以及机顶盒设备. SQLite数据库是使用C语言来编写的,因此在Cocos2d-x使用SQLite也是得心应手. 本文介绍一下SQLite3数据库的基础用法:增删改查. PS:另外对于SQLite的可视

sed命令基础用法

    sed(Stream EDitor)简介 sed是一个流编辑器编辑器,本身是一个管道命令,主要以行为单位处理文本文件,可以将数据进行替换.删除.新增.选取等特定工作:sed并不会处理文本文件本身,而是每当处理一个文件时,按顺序逐行读取到模式空间(内存)中,而后在模式空间中完成编辑,把编辑的结果输出到屏幕上,接着处理下一行,反复操作,直到文件结尾. 模式空间:将读取的内容放在内存中的一块区域编辑,这些内存空间就称为模式空间 格式: sed [options]    'Address Com

2017.04 vue学习笔记---08表单控件绑定---基础用法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> div{ margin-bottom: 30px; } </style> <script src="js/vue.js"></script> <

UIButton的最基础用法

UIButton的最基础用法 UIButton (1) 创建显示一个Button      //演示UI中按钮类UIButton使用 //需求: 想要在界面上显示一个按钮 //解决:   使用UIButton按钮类  //<1>创建按钮,一般需要指定按钮的风格 //系统样式的按钮:  UIButtonTypeSystem //如果创建带图片的: 一般选用UIButtonTypeCustom //圆角矩形: ios7不再使用UIButtonTypeRoundedRect //UIButtonTy

Vue组件基础用法

前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需,使用不同的组件来拼接页面.这种开发模式使前端页面易于扩展,且灵活性高,而且组件之间也实现了解耦.本文将详细介绍Vue组件基础用法 概述 组件是一个自定义元素或称为一个模块,包括所需的模板.逻辑和样式.在HTML模板中,组件以一个自定义标签的形式存在,起到占位符的功能.通过Vue.js的声明式渲染后,

sed基础用法

在linux系统中,sed的文本处理无疑是一个非常强大的工具,用好sed可以使我们工作效率成倍提升,下面就小结一下sed的常用命令参数,只需关注常用的即可. 选项参数 首先来一发sed --help了解一下常用的参数 # sed --help Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]... -n  忽略打印输出,一般是避免默认输出,只有我们处理的那一行文本会显示在屏幕上 -e  在命令行进行文本的处理

初识salt之saltstack配置应用以及基础用法

一.测试是否能管理client 使用模块cmd.run 可以查看到client的ip地址 [[email protected]_server ~]# salt '*' cmd.run 'ip a' salt_client1:     1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00