当前位置: 首页 > 知识库问答 >
问题:

Spring数据elasticsearch-查询

太叔逸春
2023-03-14

我是elasticsearch的新手,尝试使用查询、日期直方图和facets从elasticsearch检索索引数据。我有elasticsearch和kibana在服务器上正常运行。现在,我想从elasticsearch中提取特定的索引数据,并在另一个自主开发的应用程序(SpringWeb应用程序)中将其绘制为图形。因此,考虑使用spring数据elasticsearch,但通过互联网找到了使用elasticsearch存储库的示例应用程序。

https://github.com/BioMedCentralLtd/spring-data-elasticsearch-sample-application

请帮助我使用spring data elasticsearch或其他更好的方法从elasticsearch中提取数据。(我不想像示例中那样使用对象/存储库,只需要以JSON字符串的形式获取数据)。

共有1个答案

云凌
2023-03-14

最后,我使用了普通的Elasticseach java客户端来工作。下面的代码可能很有用。

<bean id="esConnection" class="com.es.connection.ESConnection" scope="singleton" autowire="byName">
    <property name="host" value="${es.host}" />
    <property name="port" value="${es.port}" />
    <property name="clusterName" value="${es.cluster}" />
</bean>

import javax.annotation.PostConstruct;

import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;

public class ESConnection {
    TransportClient client;
    private String host;
    private int port;
    private String clusterName;

    public ESConnection() {

    }

    public ESConnection(String host,int port,String clusterName) {
        this.host = host;
        this.clusterName = clusterName;
        this.port = port;

    }

    @PostConstruct
    public void connect() {
        Settings settings = ImmutableSettings.settingsBuilder()
                .put("cluster.name",clusterName)
                .build();
        client = new TransportClient(settings);
        client.addTransportAddress(new InetSocketTransportAddress(host,port));          
    }

    public void setHost(String host) {
        this.host = host;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public void setClusterName(String clusterName) {
        this.clusterName = clusterName;
    }

    public Client getClient() {
        return (Client) client;
    }

    public void close() {
        if (client != null) {
            client.close();
        }
    }

    @Override
    public String toString() {
        return String.format("%s, Host: %s, Port: %s, Cluster: %s", super.toString(), host, port, clusterName);
    }

}

在启动侦听器中,

public class StartupListener implements ServletContextListener {

    @Autowired
    ESConnection esConnection;

    public void contextInitialized(ServletContextEvent sce) {
        try {
            ServletContext context = sce.getServletContext();
            context.setAttribute("esConnection", esConnection);
        } catch (SchedulerException se) {
        } catch (Exception e) {
        }
    }

    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext context = sce.getServletContext();
        if (this.esConnection != null) {
            this.esConnection.close();
            context.removeAttribute("esConnection");
        }
    } 
}
 类似资料:
  • 我尝试使用下面的elasticsearch查询来处理Spring数据。目的是为字段返回唯一的结果。就像与SQL数据库进行比较一样。 我将该字段配置为关键字,它使查询在api中完美运行,如下所示: 我的问题是,当我尝试使用StringQuery运行时,相同的查询在Spring数据中不起作用,我得到以下错误。我猜它使用不同的api来运行查询。 我尝试过使用类型来实现相同的结果,没有重复和没有对象加载,

  • 我正在尝试查询spring data elasticsearch存储库中的嵌套属性。我的存储库如下所示: 域对象Person和Address(无getter/setter)定义如下: 我的测试保存一个人的文档,并尝试使用repository方法读取它。但没有返回任何结果。以下是测试方法: spring data elasticsearch是否支持默认的spring数据查询生成?

  • 我在继承和ElasticsearchRepository方面有一些问题。我的代码(简短版本):实体: 存储库: 我的问题是:我能够将数据放入弹性搜索中,但无法检索它们。如果我做一个存储库。findall()它可以工作。如果我做一个存储库。findWithUri(uri)它不工作(空结果)findByUri的分析异常 我试图搜索示例:https://github.com/spring-project

  • 我试图使用Spring数据Elasticsearch连接到Elasticsearch 5。 根据链接-https://github.com/spring-projects/spring-data-elasticsearch,spring数据弹性搜索-3.0.0。M4与Elasticsearch 5.4.0兼容 但我在尝试连接Elasticsearch时出现以下错误 请告诉我,如果你们中的任何一个人

  • 我试图使用Spring Data连接Elasticsearch 6.1(我使用Spring Boot) 但是提到最新版本只支持5.2。,有没有支持ES 6.1的替代方案? https://github.com/spring-projects/spring-data-elasticsearch/blob/master/README.md

  • 我使用的是Spring Boot 2.1.6和Elasticsearch 6.2.2 编辑以更好地澄清我的问题: 当我让Spring在我的存储库中使用以下方法为我生成查询时: 我想这意味着它将从索引中选择,然后按创建的降序排列结果,最后它将只返回第一个(最新)结果。 但索引中只有两个条目,相同的条目减去创建日期,该查询返回两个结果。我认为这意味着它不会转化为我所想的,而是会选择具有该ID的所有帐户