ElasticSearch入门-Bulk,Search操作

其实在上一篇博客中,只要大家能看懂,就应该能够根据其代码做到举一反三了,依次类推ES的批量操作Bulk,搜索功能Search等,但在这里还是简单讲一下。

批量索引和删除

Java代码
  1. BulkRequestBuilder bulkRequest = client.prepareBulk();  

  2.        for(int i=500;i<1000;i++){  

  3.            //业务对象  

  4.            String json = ESUtils.toJson(new LogModel());  

  5.            IndexRequestBuilder indexRequest = client.prepareIndex("twitter", "tweet")  

  6.            //指定不重复的ID        

  7.            .setSource(json).setId(String.valueOf(i));  

  8.            //添加到builder中  

  9.            bulkRequest.add(indexRequest);  

  10.        }  

  11.          

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

  13.        if (bulkResponse.hasFailures()) {  

  14.            // process failures by iterating through each bulk response item  

  15.            System.out.println(bulkResponse.buildFailureMessage());  

  16.        }  


上面只是批量索引的方法,将client.prepareIndex改为client.prepareDelete就是批量删除操作。ES对批量操作作了优化,所以大家使用时,尽量将操作集中起来调用批量接口,速度会更快一些。

搜索(Search)

这里说的搜索仅仅是简单相等条件搜索,并没有涉及真正意义上的搜索。比如,我们要搜索前1000条记录,代码如下:

Java代码
  1. SearchResponse response = client.prepareSearch("twitter")  

  2. //这个在prepareSearch中指定还不行,必须使用setTypes  

  3.                .setTypes("tweet")  

  4.                //设置查询条件,  

  5.                .setFilter(FilterBuilders.matchAllFilter())  

  6.                .setFrom(0).setSize(1000)  

  7.                .execute()  

  8.                .actionGet();  

  9.        /**

  10.         * SearchHits是SearchHit的复数形式,表示这个是一个列表

  11.         */  

  12.        SearchHits shs = response.getHits();  

  13.        for(SearchHit hit : shs){  

  14.            System.out.println("id:"+hit.getId()+":"+hit.getSourceAsString());  

  15.        }  

  16.        client.close();  


搜索有两种方法,一种是使用Filter进行搜索,一种是使用Query进行搜索,例如,想只搜索某个字段为具体值的数据,也可以这样写。

Java代码
  1. Client client = ESUtils.getClient();  

  2.        /**

  3.         * 创建查询条件,QueryBuilders相当于Hibernate的Restrictions,

  4.         * 而QueryBuilder则相当于一个Criteria,可以不停的增加本身对象

  5.         */  

  6.        BoolQueryBuilder query = QueryBuilders.boolQuery();  

  7.                 //systemName为字段名称,oa未字段值  

  8.        query.must(QueryBuilders.termQuery("systemName", "oa"));  

  9.        SearchResponse response = client.prepareSearch("twitter")  

  10. //这个在prepareSearch中指定还不行,必须使用setTypes  

  11.                .setTypes("tweet")  

  12.                //设置查询条件,  

  13.                .setQuery(query)  

  14.                .setFrom(0).setSize(60)  

  15.                .execute()  

  16.                .actionGet();  

  17.        /**

  18.         * SearchHits是SearchHit的复数形式,表示这个是一个列表

  19.         */  

  20.        SearchHits shs = response.getHits();  

  21.        for(SearchHit hit : shs){  

  22.            System.out.println(hit.getSourceAsString());  

  23.        }  

  24.        client.close();  

这些只是使用ES的传统用法,就是想用ES取代传统数据库的用法。但其实ES的主要目的并非如此,相信你使用搜索引擎也不是想做这些简单的查询和插入。排名,分词等更高级的用法,我也没有完全搞清楚,还望大家多多指教。

对这类话题感兴趣?欢迎发送邮件至 donlianli@126.com    
关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。    
更多我之前的文章,可以访问  我的空间    

 
转自:http://donlianli.iteye.com/blog/1902840

2019-03-11 09:12

知识点

相关教程

更多

Realtime Search: Solr vs Elasticsearch

Realtime Search: Solr vs Elasticsearch | Socialcast Engineering    Realtime Search: Solr vs Elasticsearch   Ryan SonnekRyan Sonnek   Tuesday May 31st, 2011 by Ryan Sonnek   19 comments   Tweet   What

ElasticSearch入门-Get Mapping

想要在Java API中获得一个mapping 还真困难,以此铭记。 import org.elasticsearch.client.Client;import org.elasticsearch.cluster.ClusterState;import org.elasticsearch.cluster.metadata.IndexMetaData;import org.elasticsearch

ElasticSearch入门-搜索如此简单

搜索引擎我也不是很熟悉,但是数据库还是比较了解。可以把搜索理解为数据库的like功能的替代品。因为like有以下几点不足: 第一、like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹配,才能用得上索引。但普通的需求并非前缀匹配。 第二、like的不能做到完全的模糊匹配。比如like '%化痰冲剂%'就不能把”化痰止咳冲剂“搜索出来。但是普通的用户,需求就是这样 第三、like无法

ElasticSearch入门-结构定义之Mapping

相当于数据库的表结构的定义,elasticsearch的mapping 也很重要。直接关系到性能及搜索结果的准确性。elasticsearch的java api的例子太少,我在这儿就献丑了。 为了说明mapping的定义,我这里定义了一个简单的模型,就ID,type,和catIds 3个属性,重在说明如何使用java api来定义mapping,具体各field应该如何定义,这里不做讨论。 pub

ElasticSearch入门-增删改查(CRUD)

ElasticSearch(名称太长,后面简称ES)作为一个搜索引擎,目前可谓是如日中天,几乎和solr齐驾并驱。关于他能做什么,跟云计算有什么关系,在此不再描述。但是ES的官方文档,特别是关于java的客户端文档,真是少的可怜,甚至连个完整的增删改的示例都没有。在此,我就献丑了。 在开始讲解之前,还是先做个铺垫,为了能够有一个可以索引的模型,我们自定义了一个模型,暂时起个名称叫LogModel吧

elasticsearch RESTful搜索引擎-(java jest 使用[入门])

elasticsearch简称ES  jest  好吧下面我介绍下jest(第三方工具),个人认为还是非常不错的...想对ES用来更好,多多研究源代码吧...迟点,会写一些关于ES的源代码研究文章,现在暂时还是入门的阶段.哈..(不敢,不敢)       它是ES的java客户端,基于http restful...   jest是开源的....其他就不清楚了,看源代码吧..哈.

ElasticSearch

http://rockelixir.iteye.com/blog/1888717 http://www.cnblogs.com/bigfanofcpp/archive/2013/01/22/2871852.html http://donlianli.iteye.com/blog/1921149 http://thinkbiganalytics.com/solr-vs-elastic-search/

elasticsearch

http://www.elasticsearch.org/tutorials/  http://labs.linkfluence.net/jobs.html  We are always looking for new talent to join our engineering team. Our team works using technologies like:    Linux Perl

ElasticSearch入门- 设置分片副本数量及putMapping

在之前的一篇文章中,写到如何创建mapping。里面只是简单的创建了一个mapping。其实,这种比较重要并且一旦建立无法修改的操作还是需要仔细规划的。 今天我介绍设置index的分片数量及副本数量,即创建索引的如何指定分片的个数及副本的个数。分片的个数在创建之后是无法再增加和减少的,除非你另外建一个索引库,而副本是可以在运行的时候,动态增加和减少。因此,在创建索引库时,规划好分片(Shard)是

elasticsearch vs solr

http://solr-vs-elasticsearch.com/ http://www.searchtechnologies.com/elasticsearch-solr-lucene.html http://quintagroup.com/services/enterprise-search/elasticsearch-vs-solr http://blog.sematext.com/2012

使用java操作redis入门示例

使用java操作redis比较热门的是使用 jedis    首先把jedis添加到pom.xml中      使用java操作redis入门示例     本示例参考网络

Riak Search

Basho: Riak Search    Riak Search   Introduction   Operations   Indexing   Querying   Persistence   Major Components   Replication   Further Reading   Introduction   Riak Search is a distributed, easi

操作标签-git入门教程

如果标签打错了,也可以删除: $ git tag -d v0.1Deleted tag 'v0.1' (was e078af9) 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。 如果要推送某个标签到远程,使用命令git push origin tagname: $ git push origin v1.0Total 0 (delta 0), reused 0

Faceted search

http://en.wikipedia.org/wiki/Faceted_search http://wiki.apache.org/solr/SolrFacetingOverview http://idratherbewriting.com/2010/05/20/faceted-classification-faceted-search-organizing-content-6/ http://

安装elasticsearch

来自:http://www.cnblogs.com/huangfox/p/3541300.html 一)安装elasticsearch 1)下载elasticsearch-0.90.10,解压,运行\bin\elasticsearch.bat (windwos) 2)进入http://localhost:9200/如下图 安装成功! 二)插件——head elasticsearch-head是一个

最新教程

更多

java线程状态详解(6种)

java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞

redis从库只读设置-redis集群管理

默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

Netty环境配置

netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

Netty基于流的传输处理

​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

Netty入门实例-使用POJO代替ByteBuf

使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

Netty入门实例-时间服务器

Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

Netty入门实例-编写服务器端程序

channelRead()处理程序方法实现如下

Netty开发环境配置

最新版本的Netty 4.x和JDK 1.6及更高版本

电商平台数据库设计

电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

HttpClient 上传文件

我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。

MongoDB常用命令

查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

快速了解MongoDB【基本概念与体系结构】

什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

windows系统安装MongoDB

安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

Spring boot整合MyBatis-Plus 之二:增删改查

基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baom

分布式ID生成器【snowflake雪花算法】

基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案