elasticsearchjava开发
Posted ffzzblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearchjava开发相关的知识,希望对你有一定的参考价值。
一、引入包
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.2.4</version> </dependency>
二、创建索引
@Test public void creatIndex() throws UnknownHostException { //1、创建一个Setting对象,相当于是一个配置信息,主要配置集群的名称, Settings settings = Settings.builder() .put("cluster.name", "my-elasticsearch").build(); //2、创建一个客户端client对象,内部通过tcp协议,所以使用93 TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9301)); client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9301)); client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9303)); //3、使用client对象创建一个索引 client.admin().indices().prepareCreate("index_hello").get(); //4、关闭client对象 client.close(); }
三、创建mapping(创建一个Mappping信息,应该是一个json数据,可以是字符串,也可以是XContentBuilder对象)
@Test
public void creatMapping() throws IOException {
TransportClient transportClient=ElasticSearchClientTest.creatClient();
IndicesAdminClient client= ElasticSearchClientTest.creatClient().admin().indices();
client.prepareCreate("twitter")
.setSettings(Settings.builder()
.put("index.number_of_shards", 5)
.put("index.number_of_replicas", 1)
)
.get();
/* client.preparePutMapping("twitter").setType("user")
.setSource("{
" +
" "properties": {
" +
" "name": {
" +
" "type": "text"
" +
" }
" +
" }
" +
"}", XContentType.JSON)
.get();*/
XContentBuilder xc=XContentFactory.jsonBuilder();
xc.startObject()
.startObject("properties")
.startObject("id")
.field("type","long")
.field("store",true)
.endObject()
.startObject("name")
.field("type","text")
.field("store",true)
.field("index",true)
.field("analyzer","ik_smart")
.endObject()
.startObject("content")
.field("type","text")
.field("store",true)
.field("index",true)
.field("analyzer","ik_smart")
.endObject()
.endObject()
.endObject();
client.preparePutMapping("twitter").setType("article").setSource(xc).get();
transportClient.close();
}
四、创建document
/** * 使用Map添加文档 * IndexResponse response = client.prepareIndex("twitter", "tweet") * .setSource(json, XContentType.JSON) * .get(); */ @Test public void creatDocument() throws UnknownHostException { Map<String, Object> map = new HashMap<String, Object>(); map.put("id",100); map.put("name","cli_java"); map.put("content","Map is a key:values pair collection. It represents a JSON structure分布式搜索elasticsearch配置文件详解 - 关于代码的那"); TransportClient transportClient=ElasticSearchClientTest.creatClient(); //IndicesAdminClient client= ElasticSearchClientTest.creatClient().admin().indices();
IndexResponse response=transportClient.prepareIndex("twitter", "article") .setSource(map, XContentType.JSON) .get();
transportClient.close();
}
五、查询
@Test public void getIndex() throws UnknownHostException,IOException { TransportClient transportClient=ElasticSearchClientTest.creatClient(); //<!--索引库查询-根据id查询--> /*GetResponse response =transportClient.prepareGet("twitter","article","ER_Lpm4Bob3tI_qjogjc").get(); Map<String,Object> map=response.getSource(); System.out.println(map.get("content"));*/ //<!--结束索引库查询-根据id查询--> //第二种创建一个查询对象 IdsQueryBuilder queryBuilder=QueryBuilders.idsQuery().addIds("ER_Lpm4Bob3tI_qjogjc","Eh_gpm4Bob3tI_qjggjb"); //执行查询 SearchResponse searchResponse=transportClient.prepareSearch("twitter") .setTypes("article") .setQuery(queryBuilder) .get(); SearchHits searchHits=searchResponse.getHits(); Iterator<SearchHit> iterator= searchHits.iterator(); while(iterator.hasNext()){ SearchHit searchHit=iterator.next(); System.out.println(searchHit.getSourceAsString()); Map<String, Object> map=searchHit.getSourceAsMap(); System.out.println(map.get("content")); } transportClient.close(); //结束第二种方式创建查询对象 }
//条件查询
@Test public void getIndex() throws UnknownHostException,IOException { TermQueryBuilder qb=QueryBuilders.termQuery("name","cli_java"); ElasticSearchClientTest.useTermGetIndex(qb); }
@Test
public void testQueryString() throws UnknownHostException {
QueryStringQueryBuilder qsq=QueryBuilders.queryStringQuery("独立寒秋,湘江北去,万里雪飘").defaultField("content");
ElasticSearchClientTest.useTermGetIndex(qsq);
}
private static void useTermGetIndex(TermQueryBuilder queryBuilder) throws UnknownHostException {
TransportClient transportClient=ElasticSearchClientTest.creatClient();
//执行条件查询
SearchResponse searchResponse=transportClient.prepareSearch("twitter")
.setTypes("article")
.setQuery((org.elasticsearch.index.query.QueryBuilder) queryBuilder)
//分页信息
//.setFrom(start)
//.setSize(pageSize)
.get();
SearchHits searchHits=searchResponse.getHits();
Iterator<SearchHit> iterator= searchHits.iterator();
while(iterator.hasNext()){
SearchHit searchHit=iterator.next();
System.out.println(searchHit.getSourceAsString());
Map<String, Object> map=searchHit.getSourceAsMap();
System.out.println(map.get("content"));
}
transportClient.close();
}
//高亮查询
@Test public void testQueryFormSize() throws UnknownHostException { QueryStringQueryBuilder qsq=QueryBuilders.queryStringQuery("庆余年").defaultField("name"); for(int i=1;i<111;i+=10){ ElasticSearchClientTest.useTermGetIndex(qsq,i,10); System.out.println("-------------------------------------------------------------------"); } } private static void useTermGetIndex(QueryStringQueryBuilder queryBuilder,int start,int pageSize) throws UnknownHostException { //高亮设置 HighlightBuilder hb=new HighlightBuilder(); hb.field("name"); hb.preTags("<em>"); hb.postTags("</em>"); TransportClient transportClient=ElasticSearchClientTest.creatClient(); //第二种创建一个查询对象 //执行查询 SearchResponse searchResponse=transportClient.prepareSearch("twitter") .setTypes("article") .setQuery((org.elasticsearch.index.query.QueryBuilder) queryBuilder) //分页信息 .setFrom(start) .setSize(pageSize) //高亮查询 .highlighter(hb) .get(); SearchHits searchHits=searchResponse.getHits(); Iterator<SearchHit> iterator= searchHits.iterator(); while(iterator.hasNext()){ SearchHit searchHit=iterator.next(); System.out.println(searchHit.getSourceAsString()); Map<String, Object> map=searchHit.getSourceAsMap(); System.out.println(map.get("content")); System.out.println("**************************************************"); Map<String, HighlightField> m=searchHit.getHighlightFields(); System.out.println(m.get("name")); }
以上是关于elasticsearchjava开发的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearchjava 操作 Elasticsearch 7.8 索引 文档 等操作
Elasticsearchjava.lang.ClassNotFoundException: org.elasticsearch.client.core.CountRequest