【问题标题】:ElasticSearch java API to get multiple documents across indexes (using alias) using item idElasticSearch java API使用项目ID跨索引获取多个文档(使用别名)
【发布时间】:2019-02-09 14:08:25
【问题描述】:

ElasticSearch 有 GET API,我们可以使用它使用文档 ID 查询特定文档的单个索引。 从 Elasticsearch 5.1 开始,GET API 也支持在别名上查询文档,该别名可以指向多个索引,如下所示:

GET /my_alias_name/_search/
{
        "query": { 
        "bool": {
         "filter": {
                "term": {
                   "_id": "AUwNrOZsm6BwwrmnodbW"
                }
            }
        }
    }
}

实现这个的对应的 JAVA API 是什么(使用 JestClient...)?

【问题讨论】:

    标签: java amazon-web-services elasticsearch kibana elasticsearch-jest


    【解决方案1】:

    1) 客户端创建:

    JestClientFactory factory = new JestClientFactory();
    factory.setHttpClientConfig(new HttpClientConfig.Builder("http://localhost:9200")
                            .multiThreaded(true)
                            .build());
    JestClient jestClient = factory.getObject();
    

    2) 准备搜索请求:

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("_id", "AUwNrOZsm6BwwrmnodbW")));
    
    Search search = new Search.Builder(searchSourceBuilder.toString())
                            .addIndex("my_alias_name") -> Add index name or an alias. 
                            .addType("my_type") -> Add index type here. 
                            .build();
    

    3) 执行搜索:

    SearchResult result = jestClient.execute(search);
    

    注意:我们可以添加一个别名来代替索引名,它适用于 同样的方式。

    【讨论】:

    • 可能我还不清楚我想到的另一件事。我专门询问了 GET API,因为我假设 SEARCH 请求比 GET 请求更昂贵(任何请求都只在文档 _id 上)!如果我错了,请纠正我。
    • 为了清楚起见,您在问题中提到的请求是 Search API 而不是 Get API。
    • 即使您使用别名执行 GET 请求,例如:GET /my_alias_name/my_type/my_id 也会返回文档。
    • 就像我提到的,我正在查询可以指向多个索引的别名,因此可以有多个文档匹配同一个文档_id。不,GET /my_alias_name/my_type/my_id 错误如下: { "error" : "ElasticsearchIllegalArgumentException[Alias [data] 有多个与之关联的索引 [[index_1, index_2]],无法执行单个索引操作]”,“状态”:400 }
    • 好的,明白了。是的,您对 GET 请求失败并出现错误是正确的,因为在您的情况下,别名指向多个索引。我不认为该案为此道歉。但是您的问题是“从 Elasticsearch 5.1 开始,GET API 也支持查询别名上的文档,该别名可以指向这样的多个索引”--搜索查询--“实现此目的的相应 JAVA API 是什么(使用 JestClient.. .)?”
    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2016-08-14
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多