ElasticSearch java客户端简单实例

pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>hui</groupId>
	<artifactId>Lucene</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Lucene</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>2.3.2</version>
		</dependency>

		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20160212</version>
		</dependency>



	</dependencies>
</project>
1.实体类:Person.java

package entity;

public class Person {
	private String name;
	private int age;
	private Double salary;

	public Person() {

	}

	public Person(String name, int age, Double salary) {
		super();
		this.name = name;
		this.age = age;
		this.salary = salary;
	}

	public Double getSalary() {
		return salary;
	}

	public void setSalary(Double salary) {
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return name + "--" + age + "--" + salary;
	}
}


2.工具类:JsonUtils.java:
package util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.json.JSONObject;

import entity.Person;

public class JsonUtils {
	public static void main(String[] args) {
		Person person = new Person("hui", 20, 10000.0);

		System.out.println(covertObject2String(person));
		// {"name":"hui","salary":10000,"age":20}

		List<Person> persons = getData(10);
		System.out.println(covertList2String(persons));
		// [{"name":"hui1","salary":10000.39982635574,"age":8},{"name":"hui2","salary":10000.160206564933,"age":11},{"name":"hui3","salary":10000.417013742277,"age":28},{"name":"hui4","salary":10000.26786620842,"age":7},{"name":"hui5","salary":10000.114354566498,"age":21},{"name":"hui6","salary":10000.80371554496,"age":28},{"name":"hui7","salary":10000.553731464302,"age":20},{"name":"hui8","salary":10000.529595425674,"age":0},{"name":"hui9","salary":10000.249770191353,"age":14},{"name":"hui10","salary":10000.023515161884,"age":25}]

	}

	public static String covertObject2String(Object obj) {

		JSONObject object = new JSONObject(obj);
		return object.toString();
	}

	public static List<String> covertList2String(List<? extends Object> objs) {

		List<String> list = new ArrayList<>();
		for (Object obj : objs) {
			list.add(covertObject2String(obj));
		}

		return list;
	}

	public static List<Person> getData(int num) {

		List<Person> persons = new ArrayList<>();
		Random rand = new Random(47);
		for (int i = 1; i <= num; i++) {
			String name = "hui" + i;
			int age = rand.nextInt(30);
			Double salary = rand.nextDouble() + 10000;
			Person p = new Person(name, age, salary);
			persons.add(p);
		}
		return persons;
	}
}
3.核心ES测试类ESTest.java:
package elasticSearch;

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

import entity.Person;
import util.JsonUtils;

public class ESTest {

	private Client client;

	public ESTest() {
		this("localhost");
	}

	public ESTest(String ip) {
		Settings settings = Settings.settingsBuilder().put("cluster.name", "huiTest")
				.build();
		//这里的cluster.name是在ES的安装目录的config文件下的elasticsearch.yml配置的,
		//即在该文件中添加:cluster.name:huiTest,如果未配置,
		//这里要写成put("cluster.name", "elasticsearch"),因为cluster.name默认是elasticsearch,
		//或者可以不写这部分,即put()这一方法不用
		
		client = TransportClient.builder().settings(settings).build();
		client = ((TransportClient) client).addTransportAddress(
				new InetSocketTransportAddress(new InetSocketAddress(ip, 9300)));

	}

	public IndexResponse createIndex(String indexName, String type,
			List<String> jsonArray) {

		IndexRequestBuilder builder = client.prepareIndex(indexName, type);
		for (String jsonTemp : jsonArray) {
			System.out.println(jsonTemp);
			builder = builder.setSource(jsonTemp);
		}
		IndexResponse response = builder.execute().actionGet();
		return response;

	}

	public List<Person> search(QueryBuilder queryBuilder, String indexName, String type) {
		List<Person> persons = new ArrayList<>();

		SearchResponse sResponse = client.prepareSearch(indexName).setTypes(type)
				.setQuery(queryBuilder).execute().actionGet();
		SearchHits hits = sResponse.getHits();

		System.out.println(hits.getTotalHits());
		Double salary = 0.0;
		SearchHit[] hitArray = hits.hits();
		for (SearchHit hit : hitArray) {
			Map<String, Object> map = hit.getSource();

			Integer age = (Integer) map.get("age");
			String name = (String) map.get("name");
			Object salaryO = map.get("salary");
			if (salaryO instanceof Integer) {
				salary = (Integer) salaryO * 1.0;
			} else {
				salary = (Double) salaryO;
			}
			Person p = new Person(name, age, salary);

			persons.add(p);
		}
		return persons;
	}

	public static void main(String[] args) {
		ESTest esTest = new ESTest();

		List<Person> persons = JsonUtils.getData(10);
		List<String> jsonArray = JsonUtils.covertList2String(persons);

		//先创建索引
		String indexName = "liuhui'sindex";// 要小写
		String type = "liuhui'sType";
		esTest.createIndex(indexName, type, jsonArray);

		//接着搜索
		// QueryBuilder builder = QueryBuilders.matchAllQuery();匹配所有
		// QueryBuilder builder = QueryBuilders.termQuery("name", "hui10");
		QueryBuilder builder = QueryBuilders.termQuery("age", "20");

		List<Person> list = esTest.search(builder, indexName, type);
		System.out.println(list);

	}

}


转载于:https://my.oschina.net/u/2430057/blog/669984

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 提供了官方的 Java 客户端,可以通过它与 Elasticsearch 服务器进行交互。下面是一个简单的示例,展示如何使用 Elasticsearch Java 客户端: 1. 首先,确保你已经在项目中添加了 Elasticsearch Java 客户端的依赖。你可以在 Maven 或 Gradle 中添加以下依赖项: Maven: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.15.0</version> </dependency> ``` Gradle: ```groovy implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.15.0' ``` 2. 在代码中创建 Elasticsearch 客户端实例: ```java import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); ``` 请确保将 "localhost" 和 9200 替换为你的 Elasticsearch 服务器的主机和端口。 3. 使用客户端执行操作,例如执行搜索操作: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.QueryBuilders; SearchRequest searchRequest = new SearchRequest("your_index_name"); searchRequest.source().query(QueryBuilders.matchQuery("your_field_name", "your_search_keyword")); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 处理搜索响应 ``` 请将 "your_index_name" 替换为你的索引名称,将 "your_field_name" 替换为你要搜索的字段名称,将 "your_search_keyword" 替换为你要搜索的关键字。 这只是一个简单的示例,Elasticsearch Java 客户端提供了丰富的 API,可用于执行各种操作,如索引文档、更新文档、删除文档等。你可以参考 Elasticsearch Java 客户端的官方文档来了解更多信息:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值