java es api jar包_Elasticsearch 搜索服务器 Java API 使用详解
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 使用详解相关推荐
- java中定义score方法_elasticsearch 自定义 script score JavaAPI查询详解
一:自定义score的应用场景 先打个比方,比如新产品上架了,我想让最新上架的产品搜索时候,排在前面,怎么办呢?很简单按时间排序.嗯这种方法很好实现. 但下面又有个需求,比如我要求排序中上架时间的比重 ...
- java项目添加jar包
java如何导入jar包 X1: 在java工程中怎么导入jar包 1. 项目名称上单击右键,点击properties. 2 .点击"Java Build Path",点击&quo ...
- java 动态卸载jar包_jar包 热加载/卸载 的初步实现
这两天做的项目中按照客户要求需要将插件模式应用到本项目中,以达到客户可以自己动态增加相关功能的目的,然后我们就根据需求制定出接口,再由客户自己实现接口,通过项目提供的相应界面将实现的jar包上传,由服 ...
- jar文件与云服务器断开,把jar包放到云服务器
把jar包放到云服务器 内容精选 换一换 简要介绍Cassandra是一套开源分布式NoSQL数据库系统.语言:Java一句话描述:一套开源分布式NoSQL数据库系统开源协议:Apache建议的版本已 ...
- java开发常用jar包_java开发常用jar包
mail.jar与activation.jar 里面包含了activation.jar和mail.jar两个包.通过里面的类的调用便可以达到发送电子邮件的目的 commons-beanutils.ja ...
- Java常用开源jar包
Java常用开源jar包 转:http://blog.csdn.net/kevingao/article/details/8125683 activation~与javaMail有关的jar包,使用j ...
- 关于IBM Lotus的JAVA代理进入jar包的说明
有2种方法,一般用第一种: 方法1: 在JAVA代理里引入JAR包: import javax.rmi.*; //(就是这样引入) public class JavaAgent extends Age ...
- “java程序打成jar包 如何处理第三方jar包”
eclipse的export的 runnable jar file 导出的jar包的形式应该可以避免这个问题,直接想所依赖的jar里的class文件也一并打入jar包里了. 问题一: 现在有一j2se ...
- linux 运行java jar_linux运行jar包、查看jar包进程、停止jar包
要运行java的项目需要先将项目打包成war包或者jar包,打包成war包需要将war包部署到tomcat服务器上才能运行.而打包成jar包可以直接使用java命令执行.在linux系统中运行jar包 ...
最新文章
- 「学习笔记」多项式相关
- 知道你用linux可视文件系统为什么搜索不到文件吗?(隐藏文件夹搜不到!!要用find . -name “xxx“命令)
- Java调用百度图像识别接口
- Stolz定理及其在求极限上的应用
- 海洋技术课设遥感反演matlab,国家重点研发计划项目“新型海洋微波遥感探测机理模型与应用研究” 课题一“微波极化遥感机理与应用技术”学术研讨会顺利召开...
- 《Internet-常见域名后缀大全》
- 浅谈MATLAb中imcrop()函数
- dreamweaver8 html5,dreamweaver8
- CTF训练(密码学)——Atbash Cipher
- Python百度文库爬虫之doc文件
- 【Excel神技】之 快速填充
- iOS-建设银行破解分享
- Linux 软中断机制分析
- 侯捷C++视频资源全集 | 百度网盘下载
- 算法交易策略的成功回测
- 2019 校内赛 RPG的地牢猎手(bfs+优先队列)
- unity可以用中文了?代码也可以中文?
- HyperTech合泰集团介绍
- Distributed Lock
- 毕业设计-基于微信小程序的签到系统
热门文章
- 微信小程序wx.showToast
- mybatis逆向工程配置(MySQL和SQL server)
- 在SQL Server Management Studio 中建立外键约束
- 王者荣耀4月14日服务器维护,王者荣耀4月14日更新了什么内容?4月14日更新内容介绍...
- 5导出word_重磅更新 !支持题库导出为word
- mysql varchar转bigint_MySQL 每秒 570000 的写入,如何实现?
- python画图渐变颜色的代号_plt绘图颜色渐变以及colormap
- 锐龙版和linux有什么区别,华为MateBook D 14锐龙版Linux版价格为何这么便宜
- 数据结构c语言版题库含答案,求数据结构c语言版的习题和答案?
- mysql安装及远程连接_Mysql安装、使用、配置远程连接,看这一篇就够了!