如何只获得id或具有fos elastica的一个字段

时间:2016-04-15 12:37:57

标签: foselasticabundle

使用fosElasticaBundle(3.1.0)获取某个索引的_ids的最快方法是什么? 我的索引有大约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']
    }
    '

谢谢

2 个答案:

答案 0 :(得分:1)

您可以通过以上命令获取索引的ID:

def longest_word(sentence)
  sentence.split(/\s+/).max_by(&:size)
end

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

或 您可以通过指定文档ID来过滤文档

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

答案 1 :(得分:0)

最后我找到了问题的答案。我只是想知道这是否正确。

    $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”重新加载配置。