如何使用 fos elastica 仅获取 ids 或一个字段

How to get only ids or one field with fos elastica

使用 fosElasticaBundle (3.1.0) 获取特定索引的 _id 的最快方法是什么?? 我的索引有大约 30,000 个文档。

例如,我将使用 fosElastica 获取所有 ID 的列表。等效的 Elasticsearch:

    curl http://localhost:9200/search/etablissement/_search?pretty=true -d { '
        "query" : { 
            "match_all" : {} 
        },
        "fields": []
    }
    '

或者如果我想获取姓名:

    curl http://localhost:9200/search/etablissement/_search?pretty=true -d { '
        "query" : { 
            "match_all" : {} 
        },
        "fields": ['name']
    }
    '

谢谢

可以通过上面的命令获取索引的id:

curl -XGET 'http://localhost:9200/search/etablissement/1

这将为您提供文档的第一个 ID。

或 您可以通过指定文档 ids

来过滤文档
{
    "ids" : {
        "type" : "my_type",
        "values" : ["2", "34", "333"]
    }
}

我终于找到了问题的答案。我只是想知道这是不是正确的方法。

    $elasticaService = $this->container->get('fos_elastica.index.search');
    $elasticaService->request("_search", "GET",  array("fields"=>array()), array("match_all" => array(),"size" => 999999) )

    $i = 1;
    $data = array();
    if(isset($results["hits"]["hits"])){
        foreach($results["hits"]["hits"] as $result){
            $data[$i] = $result["_id"];
            ++$i;
        }
    }
    return $data;

为了避免错误,我必须添加:

"index.max_result_window: 999999" 到 /etc/elasticsearch/elasticsearch.yml 和 "service apache2 restart" 重新加载配置。