java代码怎样连接es,java使用jest连接操作Elasticsearch2.2.0中的索引

前言

在了解jest框架前,楼主一直尝试用官方的Elasticsearch java api连接es服务的,可是,不知何故,一直报如下的异常信息,谷歌了很久,都说是jvm版本不一致导致的问题,可我是本地测试的,jvm肯定是一致的,这个问题现在都木有解决,but,这怎么能阻止我探索es的脚步呢,so,让我发现了jest 这个框架

org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream

Caused by: org.elasticsearch.transport.TransportSerializationException: Failed to deserialize exception response from stream

我的测试代码是参考官方api实例的,官方api地址:Elasticsearch java api,代码如下:

Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));

QueryBuilder queryBuilder = QueryBuilders.termQuery("content", "搜");

SearchResponse searchResponse = client.prepareSearch("indexdata").setTypes("fulltext")

.setQuery(queryBuilder)

.execute()

.actionGet();

SearchHits hits = searchResponse.getHits();

System.out.println("查询到记录数:" + hits.getTotalHits());

SearchHit[] searchHists = hits.getHits();

for(SearchHit sh : searchHists){

System.out.println("content:"+sh.getSource().get("content"));

}

client.close();

如果有人知道怎么回事,告诉一下楼主吧,让楼主坑的明白,感激不尽了,我的es版本是2.2.0

进入正题

了解jest

jest是一个基于 HTTP Rest 的连接es服务的api工具集,功能强大,能够使用es java api的查询语句,项目是开源的,github地址:https://github.com/searchbox-io/Jest

我的测试用例

分词器:ik,分词器地址:https://github.com/medcl/elasticsearch-analysis-ik ,es的很多功能都是基于插件提供的,es版本升级都2.2.0后,安装插件的方式不一样了,如果你安装ik分词插件有问题,请点击右上角的qq联系博主

新建索引

curl -XPUT http://localhost:9200/indexdata

创建索引的mapping,指定分词器

curl -XPOST http://localhost:9200/indexdata/fulltext/_mapping

{

"fulltext": {

"_all": {

"analyzer": "ik_max_word",

"search_analyzer": "ik_max_word",

"term_vector": "no",

"store": "false"

},

"properties": {

"content": {

"type": "string",

"store": "no",

"term_vector": "with_positions_offsets",

"analyzer": "ik_max_word",

"search_analyzer": "ik_max_word",

"include_in_all": "true",

"boost": 8

},

"description": {

"type": "string",

"store": "no",

"term_vector": "with_positions_offsets",

"analyzer": "ik_max_word",

"search_analyzer": "ik_max_word",

"include_in_all": "true",

"boost": 8

},

"title": {

"type": "string",

"store": "no",

"term_vector": "with_positions_offsets",

"analyzer": "ik_max_word",

"search_analyzer": "ik_max_word",

"include_in_all": "true",

"boost": 8

},

"keyword": {

"type": "string",

"store": "no",

"term_vector": "with_positions_offsets",

"analyzer": "ik_max_word",

"search_analyzer": "ik_max_word",

"include_in_all": "true",

"boost": 8

}

}

}

}

mapping信息可以用head插件查看,如下

0cfdab7714f1aed0c0f2c4b1f9c03203.png

导入数据和查询,看代码吧

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(classes = ElasticSearchTestApplication.class)

public class JestTestApplicationTests {

@Autowired

private KlarticleDao klarticleDao;

//得到JestClient实例

public JestClient getClient()throws Exception{

JestClientFactory factory = new JestClientFactory();

factory.setHttpClientConfig(new HttpClientConfig

.Builder("http://127.0.0.1:9200")

.multiThreaded(true)

.build());

return factory.getObject();

}

/**

* 导入数据库数据到es

* @throws Exception

*/

@Test

public void contextLoads() throws Exception{

JestClient client=getClient();

Listlists=klarticleDao.findAll();

for(Klarticle k:lists){

Index index = new Index.Builder(k).index("indexdata").type("fulltext").id(k.getArcid()+"").build();

System.out.println("添加索引----》"+k.getTitle());

client.execute(index);

}

//批量新增的方式,效率更高

Bulk.Builder bulkBuilder = new Bulk.Builder();

for(Klarticle k:lists){

Index index = new Index.Builder(k).index("indexdata").type("fulltext").id(k.getArcid()+"").build();

bulkBuilder.addAction(index);

}

client.execute(bulkBuilder.build());

client.shutdownClient();

}

//搜索测试

@Test

public void JestSearchTest()throws Exception{

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.matchQuery("content", "搜索"));

Search search = new Search.Builder(searchSourceBuilder.toString())

// multiple index or types can be added.

.addIndex("indexdata")

.build();

JestClient client =getClient();

SearchResult result= client.execute(search);

// List> hits = result.getHits(Klarticle.class);

Listarticles = result.getSourceAsObjectList(Klarticle.class);

for(Klarticle k:articles){

System.out.println("------->:"+k.getTitle());

}

}

}

下面是依赖的jar,maven项目

io.searchbox

jest

2.0.0

org.slf4j

slf4j-log4j12

1.6.1

org.elasticsearch

elasticsearch

2.2.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值