我正在使用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是否会忽略别名的条件而只是使用别名来获取索引?
答案 0 :(得分:1)
我担心你会遇到这个问题:https://github.com/elasticsearch/elasticsearch/issues/3861。
别名可以包含过滤器,该过滤器将用于过滤搜索结果,如默认过滤器。棘手的部分是当你使用get api(或multi_get)时,因为它意味着实时并且不执行搜索但只能通过id获取,如果文档尚不可用于搜索,也可以对事务日志执行在lucene索引中(如果还没有发生刷新)。这意味着在这种情况下,过滤器将被忽略,因为使用过滤器意味着执行搜索,这将导致您失去获得api的实时性。