首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合插件使用ElasticSearch Java

结合插件使用ElasticSearch Java
EN

Stack Overflow用户
提问于 2014-08-24 10:50:18
回答 2查看 4.1K关注 0票数 2

我想知道是否有可能让一个ES 1.3.1插件运行客户端API,这样我就可以沿着我的ElasticSearch插件执行ES搜索了吗?

我尝试了以下代码:

代码语言:javascript
复制
package org.elasticsearch.plugin.example;

import org.elasticsearch.common.collect.Lists;
import org.elasticsearch.common.inject.Module;
import org.elasticsearch.plugins.AbstractPlugin;

import java.util.Collection;

import org.elasticsearch.client.Client;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;


public class ExamplePlugin extends AbstractPlugin {

    @Override public String name()        { return "example-plugin"; }
    @Override public String description() { return "Example Plugin Description"; }

    @Override public Collection<Class<? extends Module>> modules() {

        //Trying to create a client to perform searching
        Client client = NodeBuilder.nodeBuilder().client(true).node().client();
        //returns error java.lang.AutoCloseable [not found];

        Collection<Class<? extends Module>> modules = Lists.newArrayList();
        modules.add(ExampleRestModule.class);
        return modules;
    }
}

但是它返回以下编译错误:

代码语言:javascript
复制
[ERROR] class file for java.lang.AutoCloseable not found

有什么办法让它起作用吗?

安装细节:

代码语言:javascript
复制
$ elasticsearch -v
Version: 1.3.1, Build: 2de6dc5/2014-07-28T14:45:15Z, JVM: 1.8.0_11

$ java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

来源:

包含pom.xml文件的当前文件结构位于这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-02 07:47:02

您的pom.xml文件没有指定要编译哪个版本的java。缺省值为1.3,我认为(我知道,很糟糕),而且那个版本当然没有java.lang.AutoCloseable。

无论如何,尝试将其添加到插件部分的pom.xml中:

代码语言:javascript
复制
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>

您还需要在编译插件的系统上安装java1.8,并将JAVA_HOME设置为安装的根路径。

因此,如果您是java二进制文件位于/home/user/java/bin/java,那么您的JAVA_HOME环境变量应该设置为'/home/user/java‘。

票数 3
EN

Stack Overflow用户

发布于 2014-11-13 23:00:34

为了让客户端在安装弹性搜索插件时,我发现在运行时只保存插件就容易多了。

例如“

代码语言:javascript
复制
public class ExampleRestHandler implements RestHandler {

private Client search_client;  //client to save for later


@Inject
public ExampleRestHandler(Settings settings, Client client, RestController restController) {

    this.search_client = client;  //save the client for searching later 
    restController.registerHandler(GET, "/_hello", this);
}

@Override
public void handleRequest(final RestRequest request,
        final RestChannel channel) {


    TermsQueryBuilder qb = QueryBuilders.termsQuery("EXAMPLE_FIELD", "EXAMPLE_FIELD_VALLUE").minimumMatch(1);   


    SearchResponse search_response = search_client.prepareSearch("INDEX_NAME")
            .setQuery(qb).execute().actionGet();

    XContentBuilder builder;
    try {
        builder = XContentFactory.jsonBuilder();

        builder.startObject();
        search_response.toXContent(builder, ToXContent.EMPTY_PARAMS);
        builder.endObject();

        channel.sendResponse(new BytesRestResponse(OK, builder.string()));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25470915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档