Elasticsearch批量索引和删除

news/2024/7/5 23:47:18 标签: Elasticsearch, 批量索引

批量索引和删除
 
Java代码  收藏代码
BulkRequestBuilder bulkRequest = client.prepareBulk();  
        for(int i=500;i<1000;i++){  
            //业务对象  
            String json = ESUtils.toJson(new LogModel());  
            IndexRequestBuilder indexRequest = client.prepareIndex("twitter", "tweet")  
            //指定不重复的ID        
            .setSource(json).setId(String.valueOf(i));  
            //添加到builder中  
            bulkRequest.add(indexRequest);  
        }  
          
        BulkResponse bulkResponse = bulkRequest.execute().actionGet();  
        if (bulkResponse.hasFailures()) {  
            // process failures by iterating through each bulk response item  
            System.out.println(bulkResponse.buildFailureMessage());  
        }  
 上面只是批量索引的方法,将client.prepareIndex改为client.prepareDelete就是批量删除操作。ES对批量操作作了优化,所以大家使用时,尽量将操作集中起来调用批量接口,速度会更快一些。
 
 
搜索(Search)


这里说的搜索仅仅是简单相等条件搜索,并没有涉及真正意义上的搜索。比如,我们要搜索前1000条记录,代码如下:
 
Java代码  收藏代码
SearchResponse response = client.prepareSearch("twitter")  
//这个在prepareSearch中指定还不行,必须使用setTypes  
                .setTypes("tweet")  
                //设置查询条件,  
                .setFilter(FilterBuilders.matchAllFilter())  
                .setFrom(0).setSize(1000)  
                .execute()  
                .actionGet();  
        /**
         * SearchHits是SearchHit的复数形式,表示这个是一个列表
         */  
        SearchHits shs = response.getHits();  
        for(SearchHit hit : shs){  
            System.out.println("id:"+hit.getId()+":"+hit.getSourceAsString());  
        }  
        client.close();  
 搜索有两种方法,一种是使用Filter进行搜索,一种是使用Query进行搜索,例如,想只搜索某个字段为具体值的数据,也可以这样写。
 
 
Java代码  收藏代码
Client client = ESUtils.getClient();  
        /**
         * 创建查询条件,QueryBuilders相当于Hibernate的Restrictions,
         * 而QueryBuilder则相当于一个Criteria,可以不停的增加本身对象
         */  
        BoolQueryBuilder query = QueryBuilders.boolQuery();  
                 //systemName为字段名称,oa未字段值  
        query.must(QueryBuilders.termQuery("systemName", "oa"));  
        SearchResponse response = client.prepareSearch("twitter")  
//这个在prepareSearch中指定还不行,必须使用setTypes  
                .setTypes("tweet")  
                //设置查询条件,  
                .setQuery(query)  
                .setFrom(0).setSize(60)  
                .execute()  
                .actionGet();  
        /**
         * SearchHits是SearchHit的复数形式,表示这个是一个列表
         */  
        SearchHits shs = response.getHits();  
        for(SearchHit hit : shs){  
            System.out.println(hit.getSourceAsString());  
        }  
        client.close();  
 
 
这些只是使用ES的传统用法,就是想用ES取代传统数据库的用法。但其实ES的主要目的并非如此,相信你使用搜索引擎也不是想做这些简单的查询和插入。排名,分词等更高级的用法,我也没有完全搞清楚,还望大家多多指教。
 


http://www.niftyadmin.cn/n/1639130.html

相关文章

[Memcache] 初探Memcache

Memcache (http://memcached.org/) memcache 是一种分布式缓存服务器&#xff0c;和通常使用的非分布式的ecache不同&#xff0c;memcache需要独立的服务器支撑&#xff0c;客户端通过配置IP地址和端口号&#xff08;默认11211&#xff09;与之连接并使用API进行数据的缓存操作…

[JST]不支持for(var i=0;ilength;i++)问题解决方法

Trimpath的循环语法支持遍历列表或者数组&#xff0c;如果我们在模板中希望能够使用传统的for循环的方式 for(var i0;i<length;i) 来实现根据定义数字大小指定遍历次数&#xff0c;则无法使用{for(i in length)}来完成&#xff0c;因为length不是列表也不是数组&#xff0c;…

[lucene]使用lucene建立网站搜索服务

lucene是一个全文检索引擎&#xff08;非分布式&#xff09;&#xff0c;使用java编写并且可以很方便的嵌入到各种系统中以实现全文检索功能&#xff0c;其通过对字符串进行分词&#xff0c;然后针对分词结果分别建立索引&#xff0c;存入内存或者磁盘&#xff0c;以提供搜索服…

Elasticsearch性能优化建议

之前公司项目中有使用Elasticsearch存储日志&#xff0c;当时使用的功能简单&#xff0c;并没有深入了解Elasticsearch&#xff0c;但是对于该支持文本搜索的存储架构还是很感兴趣&#xff0c;最近因为想在一个新项目中采用ELK&#xff08;ElasticsearchLogstashKibana&#xf…

elasticsearch 查询优化建议

最近在做一些索引相关的优化测试&#xff0c;顺便记录一下测试以及效果 1&#xff1a;优化mapping 主要包括 doc_values , index , norms &#xff0c; type的keyword和text // 效果明显 doc_values属性 用于把数据序列化到磁盘&#xff0c;使索引结构更紧密 默认为tru…

[lucene第二季]利用缓存辅助精确更新索引

在上一篇的lucene的入门篇中&#xff0c;我们编写了一个帮助系统&#xff0c;从数据库中将具体的信息获取出来并使用CJKAnalyzer分词后建立索引&#xff0c;提供针对于关键字的搜索服务&#xff0c;其中我们采用定时器的方式每隔10分钟更新一次索引&#xff0c;更新的方式为先删…

[lucene]倒排笔记

lucene的倒排算法相关笔记&#xff1a; 计算文章中关键字出现的位置以及出现频率&#xff0c;以便于精准定位。 百度的定义&#xff1a;用记录的非主属性查找记录而组织的文件&#xff0c;叫倒排文件&#xff0c;或者 倒排索引&#xff0c;次索引 lucene不使用B树&#xff0…

[ElasticSearch]Java API 之 滚动搜索(Scroll API)

一般搜索请求都是返回一"页"数据&#xff0c;无论数据量多大都一起返回给用户&#xff0c;Scroll API可以允许我们检索大量数据&#xff08;甚至全部数据&#xff09;。Scroll API允许我们做一个初始阶段搜索并且持续批量从Elasticsearch里拉取结果直到没有结果剩下。…