默认进行了elasticsearch安装和ik安装, 超时配置, 分页压力配置等
添加maven依赖
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.3</version> </dependency>
注: 因为spring-data-elasticsearch目前只支持到2.4.0, 所以, 暂不使用5.2.0版本
关于版本控制可见: https://github.com/spring-projects/spring-data-elasticsearch
第一部分, 使用java操作elasticsearch
1, 创建一个node节点, 加入集群中, 通过这个node获取cilent (不建议使用)
这种方式相当于创建了一个节点, 不存储数据, 可通过claspath下的elasticsearch.yml设置, 也可通过编程的方式配置,
Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.ping_timeout", 1000) .put("discovery.zen.ping.multicast.enabled", "false").put("timeout", 1) .putArray("discovery.zen.ping.unicast.hosts", "l-flightdev18.f.dev.cn0.qunar.com:9300", "l-flightdev17.f.dev.cn0.qunar.com:9300") .build(); Node node = NodeBuilder.nodeBuilder().clusterName("flight_fuwu_order_index").client(true).settings(settings).node(); Client client = node.client();
2, 通过transportClient来连接集群
获取了所有node节点的client, 发送请求时遍历可用的client,
Elasticsearch为Java用户提供了两种内置客户端: 节点客户端(node client): 节点客户端以无数据节点(none data node)身份加入集群,换言之,它自己不存储任何数据,但是它知道数据在集群中的具体位置,并且能够直接转发请求到对应的节点上。 传输客户端(Transport client): 这个更轻量的传输客户端能够发送请求到远程集群。它自己不加入集群,只是简单转发请求给集群中的节点。 两个Java客户端都通过9300端口与集群交互,使用Elasticsearch传输协议(Elasticsearch Transport Protocol)。集群中的节点之间也通过9300端口进行通信。如果此端口未开放,你的节点将不能组成集群。+ TIP Java客户端所在的Elasticsearch版本必须与集群中其他节点一致,否则,它们可能互相无法识别。
https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/index.html
下面介绍第二种连接方式:
1, 获取client连接
// 创建客户端, 使用的默认集群名, "elasticSearch" TransportClient client = TransportClient.builder().build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.50.37"), 9300));
// 通过setting对象指定集群配置信息, 配置的集群名 Settings settings = Settings.settingsBuilder().put("cluster.name", "wenbronk_cluster") // 设置集群名 .put("client.transport.sniff", true) // 开启嗅探 .put("client.transport.ignore_cluster_name", true) // 忽略集群名字验证 // .put("client.transport.ping_timeout", 5) // 报错, ping等待时间, // 默认5s // .put("client.transport.nodes_sampler_interval", 5) //报错, // 多久打开连接, 默认5s .build(); TransportClient client = TransportClient.builder().settings(settings).build();
2, 自带json转换, 使用静态导入
import static org.elasticsearch.common.xcontent.XContentFactory.*; XContentBuilder builder = jsonBuilder() .startObject() .field("user", "kimchy") .field("postDate", new Date()) .field("message", "trying out Elasticsearch") .endObject()String json = builder .string();
3,
时间: 2024-10-16 16:05:38