美文网首页
Elasticsearch java api 概述

Elasticsearch java api 概述

作者: Jane_5W | 来源:发表于2017-02-10 10:28 被阅读0次

官网API地址

https://www.elastic.co/guide/en/elasticsearch/client/index.html

具体学习描述

  • 所有的elasticsearch操作都是通过 Client对象进行的。
  • 操作会存储在client中 然后以批处理的方式执行
    -所有相关API 都基于java API

maven依赖

  • 需要加入Log4j 2 dependencies
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>
  • 在classpath路径下添加log4j 2 的配置文件,例如在src/main/resources project 目录下的 log4j2.properties:
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout

rootLogger.level = info
rootLogger.appenderRef.console.ref = console
  • 使用SLF4J 需加入以下如下 :
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>

我们可以用很多有关SLF4J的实现详细见这个页面,作为例子 ,此处使用slf4j-simple 作为展示

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.21</version>
</dependency>

处理jar包依赖冲突

通过第三方依赖如Guava and Joda 来处理jar包冲突 ;例如 如果es(以后凡是elasticsearch简称es) 使用的是 Joda 2.8 而你的java代码使用的是 Joda 2.1

那么你又两种方式可以解决这个问题

方式一

更新你的代码版本

方式二

重新加载冲突依赖,使其与你的项目或者es及es client其相关插所需版本一致
详细操作方法参见这里

打包成含有依赖的jar包

如果你想讲你的应用打包成含有所有依赖的jar包,不能使用 maven-assembly-plugin 因为他不能处理 META-INF/services目录结构,而应该使用maven-shade-plugin 其配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals><goal>shade</goal></goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

注意:如果你想要把你的应用入口主程序 main.class 加入jar包以便运行,你需要做如下操作:

<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <mainClass>org.elasticsearch.demo.Generate</mainClass>
</transformer>

部署项目在 JBoss EAP6 module.

Elasticsearch 和 Lucene classes 需要部署在同一个 JBoss module

配置module.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<module name="org.elasticsearch">
  <resources>
    <!-- Elasticsearch -->
    <resource-root path="elasticsearch-2.0.0.jar"/>
    <!-- Lucene -->
    <resource-root path="lucene-core-5.1.0.jar"/>
    <resource-root path="lucene-analyzers-common-5.1.0.jar"/>
    <resource-root path="lucene-queries-5.1.0.jar"/>
    <resource-root path="lucene-memory-5.1.0.jar"/>
    <resource-root path="lucene-highlighter-5.1.0.jar"/>
    <resource-root path="lucene-queryparser-5.1.0.jar"/>
    <resource-root path="lucene-sandbox-5.1.0.jar"/>
    <resource-root path="lucene-suggest-5.1.0.jar"/>
    <resource-root path="lucene-misc-5.1.0.jar"/>
    <resource-root path="lucene-join-5.1.0.jar"/>
    <resource-root path="lucene-grouping-5.1.0.jar"/>
    <resource-root path="lucene-spatial-5.1.0.jar"/>
    <resource-root path="lucene-expressions-5.1.0.jar"/>
    <!-- Insert other resources here -->
  </resources>

  <dependencies>
    <module name="sun.jdk" export="true" >
        <imports>
            <include path="sun/misc/Unsafe" />
        </imports>
    </module>
    <module name="org.apache.log4j"/>
    <module name="org.apache.commons.logging"/>
    <module name="javax.api"/>
  </dependencies>
</module>

补充:
Lucene是一套用于全文检索和搜寻的开源程式库.
Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库;人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆

client

你可以通过多种方式使用 Java client:

  • 在一个已有的集群中,执行标准的索引(index)、获取、删除、搜索操作
  • 在一个运行中的集群,执行管理任务

最简单的获取client的方式

通过与集群相连的TransportClient

注意:client 的主程序版本必须和集群中的节点一致,如果有些微的不同会导致某些新增功能无法使用. Clients 应该和cluster的版本一致.

Transport Client

TransportClient 使用 the transport 模块与Elasticsearch cluster 远程连接.它并没有加入集群中,而仅仅是获取一个或多个传输地址并且以round robin fashion(原谅我暂时无法翻译!!!)在每个操作上通信 (though most actions will probably be "two hop" operations).

// on startup

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300))
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300));

// on shutdown

client.close();

如果你所使用的集群名称不是 "elasticsearch",你就需要设置你的集群名称

Settings settings = Settings.builder()
        .put("cluster.name", "myClusterName").build();
TransportClient client = new PreBuiltTransportClient(settings);
//Add transport addresses and do something with the client...

所谓的鼻息特征: sniffing feature

Transport client 可以动态添加新的或删除旧的主机
原理说明
1,在sniffing 被启用时 transport client会连接它内部通过调用 addTransportAddress 建立的节点列表. 此后, transport client会调用这些节点的内部集群状态API 去发现可用的数据节点. 这个client的内部节点列表将仅仅被这些数据节点替代.

2,这个数据列表默认每5秒刷新一次

3,sniffer所连接的ip地址都是在es的配置中定义声明的

4,这个列表可能不会包含它所连接的初始节点,如果改初始节点不是数据节点

例如:如果你初始化连接了一个主机节点,在sniffing之后,不会请求访问这个主机节点,而是请求访问其他任意的数据节点,因为排除非数据节点可以避免非数据主节点的搜索阻塞

启用sniffing: set client.transport.sniff 为 true

Settings settings = Settings.settingsBuilder()
        .put("client.transport.sniff", true).build();
TransportClient client = new PreBuiltTransportClient(settings);

其他 transport client 参数设置说明:

client.transport.ignore_cluster_name

设为true 时将忽略对连接的节点集群名称的有效性验证(since 0.19.4)

client.transport.ping_timeout

等待ping一个节点的操作响应时间;默认5s.

client.transport.nodes_sampler_interval

sample / ping节点列表和连接的节点的频率. 默认5s.

** coordinating node **

如果一个节点没有主节点的功能,不能持有数据,也不能预处理文件,那么这个节点就是一个 coordinating node ,它只能发送请求,处理减少搜索时间,分配批处理索引.最重要的是可以作为 协调节点的智能负载平衡器。

Coordinating only nodes在大集群的时候是非常有用的,可以通过从数据节点和主节点上将转移负担到 协调节点.   协调节点加入集群并像其他节点一样,接受完整的集群状态信息,并利用这些信息去匹配寻找最佳请求路径

过多的Coordinating only nodes会增加集群的负担

Connecting a Client to a Coordinating Only Node

在应用里创建一个连接到 Coordinating Only Node的TransportClient
你就可以加载任何你需要的插件.例如 搜索插件

相关文章

网友评论

      本文标题:Elasticsearch java api 概述

      本文链接:https://www.haomeiwen.com/subject/taqgittx.html