最近业余时间接触es不久,碰到了一些关于批量添加数据的问题,在本地机器上配置了三个节点的集群,一共有5.2w的元数据,批量更新的时候尼玛总是出现IO异常问题,数据少还中,比如500,1000。已经做了批量更新的间隔,如一次1000,500,200都试过,还是IO。如果说是本机配置的不够,2G的足够了吧,通过一个侧面的例子也能反应出来,同样在本机做了一个numshards=3的solr集群,更新25.8w的数据都没有问题。
下面贴出创建es索引,更新数据的代码,有懂的朋友帮解答一下,ps: es的资料太少了,光看例子都够费劲的,尼玛java链式方法老长老长,显得牛逼吗。
public void createIndex() throws IOException {
XContentBuilder content = XContentFactory.jsonBuilder()
.startObject()
.startObject("vType")
.startObject("properties")
.startObject("title").field("type", "string").field("indexAnalyzer", "ik").field("searchAnalyzer", "ik").endObject()
.startObject("author").field("type", "string").field("indexAnalyzer","ik").field("searchAnalyzer", "ik").endObject()
.startObject("keyword").field("type", "string").field("indexAnalyzer","ik").field("searchAnalyzer", "ik").endObject()
.startObject("fenlei").field("type", "string").endObject()
.startObject("other").field("type", "string").endObject()
.startObject("subname").field("type", "string").endObject()
.startObject("subtitles").field("type", "string").endObject()
.startObject("summary").field("type", "string").field("indexAnalyzer","ik").field("searchAnalyzer", "ik").endObject()
.startObject("videolink").field("type", "string").endObject()
.endObject()
.endObject()
.endObject();
client.admin().indices().prepareCreate("video").addMapping("vType", content)
.setSettings(ImmutableSettings.settingsBuilder().put("number_of_shards", 8)).execute().actionGet();
}
更新数据的代码:
public void bulkData(){
BulkRequestBuilder blukRequest = client.prepareBulk();
try {
IndexReader reader = IndexReader.open(FSDirectory.open(new File(store_path)));
int maxDocs = reader.maxDoc();
List<Document> list = new ArrayList<Document>();
int count = 0;
for (int i = 0; i < maxDocs; i++) {
list.add(reader.document(i));
if(list.size()%100==0){
for(int j =0;j<list.size();j++){
Document doc = list.get(j);
blukRequest.add(client.prepareIndex("video", "vType", String.valueOf((j+count)))
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("title",doc.get("title"))
.field("author",doc.get("author"))
.field("keyword",doc.get("keyword"))
.field("fenlei",doc.get("fenlei"))
.field("other",doc.get("other"))
.field("subname",doc.get("subname"))
.field("subtitles",doc.get("subtitles"))
.field("summary",doc.get("summary"))
.field("videolink", doc.get("videolink"))
.endObject()
));
}
count+=list.size();
BulkResponse bulkResponse = blukRequest.execute().actionGet();
client.admin().indices().prepareRefresh().execute().actionGet();
if(!bulkResponse.hasFailures())
System.out.println("------success!");
else
System.out.println("------failure!");
list.clear();
}
}
if(list.size()>0){
for(int i =0;i<list.size();i++){
Document doc = list.get(i);
blukRequest.add(client.prepareIndex("video", "vType", String.valueOf((i+count)))
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("title",doc.get("title"))
.field("author",doc.get("author"))
.field("keyword",doc.get("keyword"))
.field("fenlei",doc.get("fenlei"))
.field("other",doc.get("other"))
.field("subname",doc.get("subname"))
.field("subtitles",doc.get("subtitles"))
.field("summary",doc.get("summary"))
.field("videolink", doc.get("videolink"))
.endObject()
));
count+=list.size();
BulkResponse bulkResponse = blukRequest.execute().actionGet();
// client.admin().indices().prepareRefresh().execute().actionGet();
if(!bulkResponse.hasFailures())
System.out.println("------success!");
else
System.out.println("------failure!");
list.clear();
}
}
} catch (CorruptIndexException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
还是静坐等待高手的指点ing......
接下来介绍solr4.0Alpha,喜欢solr的朋友可以学习了哦...
限于篇幅solr4.0+tomcat的安装,查看我的百度空间http://hi.baidu.com/620734263/item/372ea2c7955fbc7088ad9eaa
- 大小: 44 KB
- 大小: 51.3 KB
- 大小: 30.3 KB
分享到:
相关推荐
Ik Analyzer是一款开源的、基于Java实现的中文分词器,常用于Solr和Elasticsearch等全文搜索引擎的中文处理。在Solr中使用Ik Analyzer,你需要: 1. 将ik-analyzer解压到Solr的lib目录下。 2. 在schema.xml中定义一...
本课程提供所有代码笔记...14、ElasticSearch下载安装(window以及linux下安装) 15、集群环境搭建 16、客户端Kibana安装与使用 17、集群管理插件head安装使用 18、java api 操作 ES 19、电商项目实战应用等等 ....
课程提供所有代码笔记素材...2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理插件head安装使用 6、java api 操作 ES 7、电商项目实战应用等等 .....
- 利用Apache Solr或Elasticsearch实现高性能的全文搜索功能。 - 使用Maven或Gradle进行项目构建和依赖管理。 4. **社区与支持**: - "fatherz88"可能是社区中的一员,表明有活跃的开发者参与和贡献。 - 开源...
3. 掌握Oracle、MySQL、SQLServer等关系型数据库,以及Elasticsearch和Solr等搜索服务框架,具备索引优化和性能调优能力。 在描述这些技能时,不仅要展示你所掌握的技术,还要强调你在实际项目中的应用和解决问题的...
- 中信银行基金管理系统:利用Canal同步数据到Elasticsearch,使用Memcache和Redis进行缓存优化,提高查询性能。通过接口拆分和多线程处理优化业务逻辑,确保快速响应。 综上所述,这位求职者具备扎实的Java开发...
这可能涉及到对数据库查询优化和全文搜索技术,如Solr或Elasticsearch。 5. **评论互动**:用户可以对新闻进行评论,形成社区互动。这部分可能需要处理并发访问和实时更新,可以使用WebSocket或AJAX技术实现动态...
- 计算层涉及Solr、ElasticSearch、Hadoop、HBase、Storm和Spark。 - 运维工具包括Linux、Nginx、Puppet、Zabbix和OpenStack。 - 项目管理工具如Eclipse、SVN、Maven、Hudson持续集成以及Confluence等。 **技术架构...
2. 音乐搜索:集成Elasticsearch或Solr进行全文检索,提高搜索效率。 3. 版权保护:可以实现数字版权管理(DRM)功能,确保音乐内容的安全性。 四、安全与权限管理 系统可能使用Spring Security进行身份验证和授权...
- **搜索引擎**:了解ElasticSearch搜索引擎。 - **缓存管理**:接触过Redis缓存管理系统,处理分布式缓存和集群下session共享问题。 ### 工作经验 1. **杭州商快软件有限公司**(2016/7 - 至今) 在此期间,他...
- **Elasticsearch**:是一个分布式的、RESTful风格的搜索和数据分析引擎,它能够处理海量的数据。 #### **Solr** - **Solr**:是一个高性能、可伸缩的企业级搜索平台,适用于需要全文搜索的应用场景。 #### **...
对于大量查询操作,使用全文搜索引擎(如Elasticsearch或Solr)能提供更快的搜索速度和更好的用户体验。搜索引擎索引数据库中的部分或全部数据,提供高效的全文检索功能,减轻数据库读取压力。 ### 阶段六:用缓存...
例如,使用 Hadoop 或 Spark 进行大数据处理,使用 Elasticsearch 或 Solr 进行搜索服务。 6. **冗余与容错**:为保证高可用性,系统设计应考虑冗余和容错机制。例如,通过主从复制或分布式一致性算法(如 Paxos、...
- 可以使用Elasticsearch或Solr进行全文搜索,提高文档检索效率。 7. **用户界面**: - 创建响应式前端页面,可使用Bootstrap、Vue.js或React等现代前端框架,确保在不同设备上的良好展示。 - 使用Ajax实现异步...
9. **搜索功能**:论坛通常提供关键词搜索,这就需要理解全文搜索的概念,可能涉及Lucene或Solr等搜索引擎库,或者集成Elasticsearch实现高级搜索功能。 10. **AJAX异步通信**:为了提升用户体验,论坛可能会使用...
- **搜索引擎**:如 Solr 或 Elasticsearch。 - **缓存引擎**:如 Redis。 - **任务调度**:如 Quartz。 - **身份认证**:如 Spring Security。 - **报表服务**:如 BIRT。 - **集群、负载均衡、故障转移**:实现高...
Solr & Elasticsearch | 分布式全文搜索引擎 | [http://lucene.apache.org/solr/](http://lucene.apache.org/solr/) [https://www.elastic.co/](https://www.elastic.co/) Quartz | 作业调度框架 | ...