【问题标题】:elastic search: How to retrieve the indexed data弹性搜索:如何检索索引数据
【发布时间】:2015-05-21 21:59:58
【问题描述】:

在弹性搜索 java api 中,假设我正在使用此客户端构建索引数据

Node node = nodeBuilder().clusterName("es").node();
Client client = node.client();

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
    .setSource(jsonBuilder()
                .startObject()
                    .field("user", "kimchy")
                    .field("postDate", new Date())
                    .field("message", "trying out Elasticsearch")
                .endObject()
              )
    .execute()
    .actionGet();

此索引数据存储在文件夹 XYZ/elasticsearch/data 中。 我的问题是如何从其他客户端或其他代码中检索这些索引数据。有什么方法可以给路径,可以导入已经索引的数据,然后查询?

编辑:

其他电脑客户端的代码

    Node node = nodeBuilder().clusterName("es").node();
Client client = node.client();

MatchQueryBuilder qb = QueryBuilders.matchQuery("user", "kimchy");
SearchRequestBuilder srb = client.prepareSearch("twitter").setTypes("tweet");
SearchResponse big = srb.setQuery(qb).execute().actionGet();
SearchHit[] results = big.getHits().getHits();

这表明

  search.SearchPhaseExecutionException: Failed to execute phase [query], all shards failed

谢谢

艾莉亚

【问题讨论】:

  • 为什么不直接在 localhost:9200 上查询它,您可以开始使用 match_all 查询 { "query" : {"match_all":{}}
  • @AkashYadav ,就是这样,我不会在我的计算机上查询,我只会索引它,然后我会将包含数据的文件夹传输到其他计算机,我将在那里查询它,我怎样才能检索这个已经索引的数据。谢谢
  • 过程将是相同的,只需在其他系统上安装弹性搜索并将数据文件夹放在节点文件夹中,通常位于 ubuntu 系统中的 /usr/share/elasticsearch/data/ 位置,一切都会正常工作与它在您的系统中的工作方式相同。您必须使用与上面提到的相同的索引名称和相同的 url。希望这会有所帮助。
  • @AkashYadav 我尝试了同样的事情......请参阅上面的编辑部分。但它显示了这个异常.. search.SearchPhaseExecutionException: Failed to execute phase [query], all shards failed.. 知道这是怎么回事。还是非常感谢

标签: import elasticsearch


【解决方案1】:

我不确定我是否理解这个问题,但如果它只是在 java 中查询,这里有一个例子:

MatchQueryBuilder qb = QueryBuilders.matchQuery("user", "kimchy);
SearchRequestBuilder srb = client.prepareSearch("twitter").setTypes("tweet");
srb.setQuery(qb);
SearchResponse response = srb.execute().actionGet();
//Here goes your code where you use response.getHits() that contains your items

【讨论】:

  • Christophe,我想问一下,如果我们已经索引数据并将其存储在假设 XYZ/data 文件夹中,并且我将该文件夹传输到其他计算机,那么我该如何使用这些数据到新的服务器和客户端。谢谢
  • 你问的问题很有趣,我在两天前做了一个演示。基本上我所做的是复制/粘贴整个 ElasticSearch 服务器(及其包含数据的数据文件夹)并在新计算机上运行它,就像一个魅力(至少出于演示目的,我不建议将它用于生产,你永远不知道)。如果您想将数据与其他数据一起添加到已经存在的 ElasticSearch 服务器中,我认为这不会起作用,您可能需要在文档中找到其他内容。
  • Christophe 我试过这样做,请参阅上面问题的编辑部分。你知道问题中提到的这个例外吗?还是谢谢
【解决方案2】:

您使用 my sn-p 得到的消息通常表明您的客户端无法连接到您的服务器。检查您的服务器状态(即您是否正确启动了服务器)并尝试使用它。

    Node node = NodeBuilder.nodeBuilder().client(true).node();
    client = node.client();

我认为您不需要指定集群名称,除非您有一些我不知道的自定义配置。还要检查您的索引名称。

【讨论】:

    猜你喜欢
    • 2012-09-07
    • 2021-12-16
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多