elasticsearch节点客户端使用索引别名上的mget来恢复不在别名中的文档

时间:2014-03-20 17:23:03

标签: node.js elasticsearch

我正在使用ES的节点js客户端。

我正在做一个mget但是为索引字段使用别名而不是实际的索引。 它的工作原理是它带回结果,但其中一个文件不在别名中,而是在底层索引中,即它应该通过别名测试失败,因此不会在结果中返回,但它是。

itemIds = ['3504479-4-41','3504700-4-41'];//test, second id is not in alias
esClient.mget({
     index: 'live_articles',
     _source: ['id','itemTypeId','headline','itemUrl','startDate','summary', 'onlineStatus'],
            body: {ids: itemIds}
        }, function (err, resp) {
            var items = [];
            console.log(resp.docs);
        });

这个用法实例中的mget是否会忽略别名的条件而只是使用别名来获取索引?

1 个答案:

答案 0 :(得分:1)

我担心你会遇到这个问题:https://github.com/elasticsearch/elasticsearch/issues/3861

别名可以包含过滤器,该过滤器将用于过滤搜索结果,如默认过滤器。棘手的部分是当你使用get api(或multi_get)时,因为它意味着实时并且不执行搜索但只能通过id获取,如果文档尚不可用于搜索,也可以对事务日志执行在lucene索引中(如果还没有发生刷新)。这意味着在这种情况下,过滤器将被忽略,因为使用过滤器意味着执行搜索,这将导致您失去获得api的实时性。