前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java使用jest连接操作Elasticsearch2.2.0中的索引

java使用jest连接操作Elasticsearch2.2.0中的索引

作者头像
kl博主
发布2023-11-18 09:14:43
1350
发布2023-11-18 09:14:43
举报
文章被收录于专栏:kl的专栏kl的专栏

前言

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

代码语言:javascript
复制
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,代码如下:

代码语言:javascript
复制
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插件查看,如下

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

代码语言:javascript
复制
@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项目

代码语言:javascript
复制
<!--jest依赖-->
		<dependency>
			<groupId>io.searchbox</groupId>
			<artifactId>jest</artifactId>
			<version>2.0.0</version>
		</dependency>
		<!--jest 日志依赖-->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>2.2.0</version>
		</dependency>
	</dependencies>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档