java连接elasticsearch:查询、添加数据
导入jar包
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/transport --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> </dependency>
初始化TransportClient对象
/** * 初始化TransportClient对象, 这里只配置了单个节点,例如100.100.0.1:8090 */ private TransportClient initClient() throws UnknownHostException { String node = esSetting.getClusterNodes(); int index = node.indexOf(":"); String host = node.substring(0, index); int port = Integer.valueOf(node.substring(index + 1)); Settings settings = Settings.builder() //elasticsearch节点名称 .put("cluster.name", esSetting.getClusterName()) .put("client.transport.sniff", true).build(); InetAddress address = InetAddress.getByName(host); TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new InetSocketTransportAddress(address, port)); return client; }
查询:
//查询,根据数据中date字段查询, 这里是最常用的boolQuery示例,可以通过must、must_not、filter等方法设定查询条件 QueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.rangeQuery("date").gte("2018-11-08T00:00:00.000Z") .lt("2018-11-09T00:00:00.000Z")); //elasticsearch索引及类型,对应数据库中数据库和表 String index = "index"; String type = "type"; SearchResponse response = client.prepareSearch(index) .setTypes(type).addSort("date", SortOrder.ASC) .setSize(1000).setQuery(queryBuilder).execute() .actionGet(); long total = response.getHits().getTotalHits();
写入:
try { XContentBuilder builder = XContentFactory.jsonBuilder() .startObject().field("date", "2018-11-08T00:00:00.000Z") .field("cost", 10); builder.endObject(); IndexResponse response = client .prepareIndex(index, type) .setSource(builder).get(); } catch (Exception e) { e.printStackTrace(); }