Elasticsearch的java api使用.docx_第1页
Elasticsearch的java api使用.docx_第2页
Elasticsearch的java api使用.docx_第3页
Elasticsearch的java api使用.docx_第4页
Elasticsearch的java api使用.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Elasticsearch的java api使用Java api 访问ElasticSearch的一个演示.网上的例子都是各个之间独立的,个别地方确实不好整合在一起来理解,希望通过此粗浅的例子能给使用java做搜索引擎的同学一些帮助.使用环境:1 Jdk1.6 u292 ElasticSearch(0.20.2)-RTF(感谢medcl的奉献)版本,在谷歌中搜索github中下载.3 Windows 74 ElasticSearch 访问用jar包.使用maven来添加 org.elasticsearch elasticsearch 0.20.2 ES的环境搭建:1解压ElasticSearch(0.20.2)-RTF到某个目录, 在本例中ESrtf解压到了两台电脑上(ip:32,ip:5)2在本例中因为使用的是rtf的版本,所以只需修改Eshome config目录下的elasticsearch.yml文件,在#: elasticsearch这行下增加: wallyCluster这行,作用为将es集群的默认名elasticsearch改为wallyCluster(自定义的集群名称).在#network.host: 这行下增加network.host: 32(本例中es解压到了2台电脑中,所以另一台的应该为5),作用为绑定es启动时对外服务的ip,因为我所用的机子有多个网卡,所以指定了,如果是单网卡,可以不用这句设置.3 在eshome下的bin目录中直接运行elasticsearch.bat(前提为必须设置好java的home环境变量)启动es使用rtf版本进行开发,es基本不需要修改什么.至于es中使用到的内存大小设置,中文分词,cluster等等ES概念请百度.Java api的使用:网上看了各种例子,很大程度属于转载,讲到java api的使用,都是简单的某个方面的使用,看es官网介绍加自己的理解摸索,下面给出个完整使用javaapi的demo. import java.io.IOException;import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.client.Client;import org.elasticsearch.client.transport.TransportClient;import mon.settings.ImmutableSettings;import mon.settings.Settings;import mon.transport.InetSocketTransportAddress;import mon.xcontent.XContentBuilder;import mon.xcontent.XContentFactory;import com.wally.crj.util.TimeHelper;public class ESMappingBiz private Client client;public Client getClient() return client;public void setClient(Client client) this.client = client;/* * 预定义一个索引的mapping,使用mapping的好处是可以个性的设置某个字段等的属性 * throws Exception */public void buildIndexSysDm() throws Exception/在本例中主要得注意,ttl及timestamp如何用java ,这些字段的具体含义,请去到es官网查看CreateIndexRequestBuilder cib=client.admin().indices().prepareCreate(productindex);XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject(we3r)/.startObject(_ttl)/有了这个设置,就等于在这个给索引的记录增加了失效时间,/ttl的使用地方如在分布式下,web系统用户登录状态的维护.field(enabled,true)/默认的false的.field(default,5m)/默认的失效时间,d/h/m/s 即天/小时/分钟/秒.field(store,yes).field(index,not_analyzed).endObject().startObject(_timestamp)/这个字段为时间戳字段.即你添加一条索引记录后,自动给该记录增加个时间字段(记录的创建时间),搜索中可以直接搜索该字段.field(enabled,true).field(store,no).field(index,not_analyzed).endObject().startObject(properties)/properties下定义的title等等就是属于我们需要的自定义字段了,相当于数据库中的表字段 ,此处相当于创建数据库表.startObject(title).field(type, string).field(store, yes).endObject() .startObject(description).field(type, string).field(index, not_analyzed).endObject() .startObject(price).field(type, double).endObject() .startObject(onSale).field(type, boolean).endObject() .startObject(type).field(type, integer).endObject() .startObject(createDate).field(type, date).field(format,YYYYMMddhhMMSS).endObject().endObject().endObject().endObject(); cib.addMapping(prindextype, mapping);cib.execute().actionGet();/* * 该方法为增加索引记录 * throws Exception */public void buildIndexSysDm22() throws Exception/ productindex为上个方法中定义的索引,prindextype为类型.jk8231为id,以此可以代替memchche来进行数据的缓存 IndexResponse response = client.prepareIndex(productindex, prindextype ,jk8231) .setSource(XContentFactory.jsonBuilder() .startObject() .field(title, abcd1)/该字段在上面的方法中mapping定义了,所以该字段就有了自定义的属性,比如 type等 .field(description, 中国人3) .field(price, 232 ) .field(onSale,true) .field(type,2) .field(createDate,TimeHelper.getCurrentTime() .field(dfsfs,哈哈)/该字段在上面方法中的mapping中没有定义,所以该字段的属性使用es默认的. .endObject() ) .setTTL(8000)/这样就等于单独设定了该条记录的失效时间,单位是毫秒,必须在mapping中打开_ttl的设置开关 .execute() .actionGet(); IndexResponse response2 = client.prepareIndex(productindex, prindextype ,jk8234) .setSource(XContentFactory.jsonBuilder() .startObject() .field(title, abcd2) .field(description, 中国人2) .field(price, 232 ) .field(onSale,true) .field(type,22) .field(createDate,TimeHelper.getCurrentTime() .endObject() ) .execute() .actionGet(); /* * 得到访问es的客户端,我们使用Transport Client * return */public Client buildClient()Settings settings = ImmutableSettings.settingsBuilder().put(client.transport.sniff, true).put(, wallyCluster).build();Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(32, 9300) .addTransportAddress(new InetSocketTransportAddress(5, 9300);return client;/* * 搜索的使用 */public void exm()System.out.println(删除);DeleteResponse responsedd = client.prepareDelete(productindex, prindextype, 34dds1) .setOperationThreaded(false) .execute() .actionGet();System.out.println(根据主键搜索得到值);GetResponse responsere = client.prepareGet(productindex, prindextype, oht-Sp87SA6J5l3yo9dagw) .execute() .actionGet();System.out.println(完成读取-+responsere.getSourceAsString();System.out.println(搜索);SearchRequestBuilder builder= client.prepareSearch(productindex) /搜索productindex,prepareSearch(String. indices)注意该方法的参数,可以搜索多个索引 .setTypes(prindextype) .setSearchType(SearchType.DEFAULT) .setFrom(0) .setSize(50); QueryBuilder qb2 = QueryBuilders.boolQuery() / boolQuery() 就相当于 sql中的and .must(new QueryStringQueryBuilder(万d 里).field(description)/QueryStringQueryBuilder是单个字段的搜索条件,相当于组织sql的 where后面的 字段名=字段值 .should(new QueryStringQueryBuilder(3).field(dfsfs) .must(QueryBuilders .termQuery(dfsfs, 里);/关于QueryStringQueryBuilder及termQuery等的使用可以使用es插件head来进行操作体会个中query的不同 builder.setQuery(qb2); SearchResponse responsesearch = builder.execute().actionGet(); System.out.println(+responsesearch);tryString jsondata= responsesearch.getHits().getHits()0.getSourceAsString();System.out.println(搜索出来的数据jsondata- +jsondata);catch(Exception es)public static void main(String

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论