ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。访问 ElasticSearch 的一个演示。网上的例子都是各个之间独立的,个别地方确实不好整合在一起来理解,希望通过此粗浅的例子能给使用java做搜索引擎的同学一些帮助。

使用环境,具体步骤如下:

1)JDK 1.6.0_29

2)ElasticSearch(0.20.2)-RTF,在谷歌中搜索 github 中下载。

3)Windows 7

4)ElasticSearch 访问用jar包.使用maven来添加如下:

org.elasticsearch

elasticsearch

0.20.2

ES的环境搭建具体步骤如下:

1)解压ElasticSearch(0.20.2)-RTF到某个目录,在本例中ESrtf解压到了两台电脑上(IP:192.168.1.232,IP:192.168.1.65)

2)在本例中因为使用的是rtf的版本,所以只需修改Eshome config目录下的elasticsearch.yml文件,在#cluster.name: elasticsearch这行下增加cluster.name: wallyCluster这行,作用为将es集群的默认名elasticsearch改为wallyCluster(自定义的集群名称).在#network.host: 127.0.0.1这行下增加network.host: 192.168.1.232(本例中es解压到了2台电脑中,所以另一台的应该为192.168.1.65),作用为绑定es启动时对外服务的ip,因为我所用的机子有多个网卡,所以指定了,如果是单网卡,可以不用这句设置。

3)在 eshome 下的bin目录中直接运行elasticsearch.bat(前提为必须设置好java的home环境变量)启动es,使用rtf版本进行开发,es基本不需要修改什么.至于es中使用到的内存大小设置,中文分词,cluster等等ES概念请百度。

网上看了各种例子,很大程度属于转载,讲到java API 的使用,都是简单的某个方面的使用,看ES官网介绍加自己的理解摸索,下面给出个完整使用javaapi的demo,Java API 的使用,具体代码如下: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 org.elasticsearch.common.settings.ImmutableSettings;

import org.elasticsearch.common.settings.Settings;

import org.elasticsearch.common.transport.InetSocketTransportAddress;

import org.elasticsearch.common.xcontent.XContentBuilder;

import org.elasticsearch.common.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", "www.yoodb.com")

.field("price", 1000 )

.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", "yoodb.com")

.field("price", 1000 )

.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("cluster.name", "wallyCluster").build();

Client client = new TransportClient(settings)

.addTransportAddress(new InetSocketTransportAddress("192.168.1.232", 9300))

.addTransportAddress(new InetSocketTransportAddress("192.168.1.65", 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("素文宅").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);

try{String jsondata= responsesearch.getHits().getHits()[0].getSourceAsString();

System.out.println("搜索出来的数据jsondata-- "+jsondata);

}catch(Exception es){

}

}

public static void main(String[] dfd){

ESMappingBiz esm=new ESMappingBiz();

esm.setClient(esm.buildClient());

try {

//esm.buildIndexSysDm();

esm.buildIndexSysDm22();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

esm.getClient().close();

}

}

}

在开发中建议使用 ElasticSearch 的一些插件来查看 ElasticSearch 集群的即时信息,比如head(elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es),可以很直观的查看索引的信息,及组织json的查寻字符串等。

java es api jar包_Elasticsearch 搜索服务器 Java API 使用详解相关推荐

  1. java中定义score方法_elasticsearch 自定义 script score JavaAPI查询详解

    一:自定义score的应用场景 先打个比方,比如新产品上架了,我想让最新上架的产品搜索时候,排在前面,怎么办呢?很简单按时间排序.嗯这种方法很好实现. 但下面又有个需求,比如我要求排序中上架时间的比重 ...

  2. java项目添加jar包

    java如何导入jar包 X1: 在java工程中怎么导入jar包 1. 项目名称上单击右键,点击properties. 2 .点击"Java Build Path",点击&quo ...

  3. java 动态卸载jar包_jar包 热加载/卸载 的初步实现

    这两天做的项目中按照客户要求需要将插件模式应用到本项目中,以达到客户可以自己动态增加相关功能的目的,然后我们就根据需求制定出接口,再由客户自己实现接口,通过项目提供的相应界面将实现的jar包上传,由服 ...

  4. jar文件与云服务器断开,把jar包放到云服务器

    把jar包放到云服务器 内容精选 换一换 简要介绍Cassandra是一套开源分布式NoSQL数据库系统.语言:Java一句话描述:一套开源分布式NoSQL数据库系统开源协议:Apache建议的版本已 ...

  5. java开发常用jar包_java开发常用jar包

    mail.jar与activation.jar 里面包含了activation.jar和mail.jar两个包.通过里面的类的调用便可以达到发送电子邮件的目的 commons-beanutils.ja ...

  6. Java常用开源jar包

    Java常用开源jar包 转:http://blog.csdn.net/kevingao/article/details/8125683 activation~与javaMail有关的jar包,使用j ...

  7. 关于IBM Lotus的JAVA代理进入jar包的说明

    有2种方法,一般用第一种: 方法1: 在JAVA代理里引入JAR包: import javax.rmi.*; //(就是这样引入) public class JavaAgent extends Age ...

  8. “java程序打成jar包 如何处理第三方jar包”

    eclipse的export的 runnable jar file 导出的jar包的形式应该可以避免这个问题,直接想所依赖的jar里的class文件也一并打入jar包里了. 问题一: 现在有一j2se ...

  9. linux 运行java jar_linux运行jar包、查看jar包进程、停止jar包

    要运行java的项目需要先将项目打包成war包或者jar包,打包成war包需要将war包部署到tomcat服务器上才能运行.而打包成jar包可以直接使用java命令执行.在linux系统中运行jar包 ...

最新文章

  1. 「学习笔记」多项式相关
  2. 知道你用linux可视文件系统为什么搜索不到文件吗?(隐藏文件夹搜不到!!要用find . -name “xxx“命令)
  3. Java调用百度图像识别接口
  4. Stolz定理及其在求极限上的应用
  5. 海洋技术课设遥感反演matlab,国家重点研发计划项目“新型海洋微波遥感探测机理模型与应用研究” 课题一“微波极化遥感机理与应用技术”学术研讨会顺利召开...
  6. 《Internet-常见域名后缀大全》
  7. 浅谈MATLAb中imcrop()函数
  8. dreamweaver8 html5,dreamweaver8
  9. CTF训练(密码学)——Atbash Cipher
  10. Python百度文库爬虫之doc文件
  11. 【Excel神技】之 快速填充
  12. iOS-建设银行破解分享
  13. Linux 软中断机制分析
  14. 侯捷C++视频资源全集 | 百度网盘下载
  15. 算法交易策略的成功回测
  16. 2019 校内赛 RPG的地牢猎手(bfs+优先队列)
  17. unity可以用中文了?代码也可以中文?
  18. HyperTech合泰集团介绍
  19. Distributed Lock
  20. 毕业设计-基于微信小程序的签到系统

热门文章

  1. 微信小程序wx.showToast
  2. mybatis逆向工程配置(MySQL和SQL server)
  3. 在SQL Server Management Studio 中建立外键约束
  4. 王者荣耀4月14日服务器维护,王者荣耀4月14日更新了什么内容?4月14日更新内容介绍...
  5. 5导出word_重磅更新 !支持题库导出为word
  6. mysql varchar转bigint_MySQL 每秒 570000 的写入,如何实现?
  7. python画图渐变颜色的代号_plt绘图颜色渐变以及colormap
  8. 锐龙版和linux有什么区别,华为MateBook D 14锐龙版Linux版价格为何这么便宜
  9. 数据结构c语言版题库含答案,求数据结构c语言版的习题和答案?
  10. mysql安装及远程连接_Mysql安装、使用、配置远程连接,看这一篇就够了!