我如何组文档elasticsearch由单场?(How do I group documents i

2019-10-22 08:12发布

如果我有一堆的,我想返回由文档的一个字段分组在elaticsearch文件,我该怎么办呢? 此外,我需要它始终返回结果的固定数量(使用将maxResults)

例如,如果我有一大堆的文件,代表一个人,包含人的属性文件的每一个领域的文件。 比方说,每个人都有文档中的城市场。 我想查询Elasticsearch的方式,将返回50个结果由城市分组。 通过50个结果,我想知道它是如何可能返回映射到这些城市所有的人50个城市。

我发现一个实施:

http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

但是,我想申请分页这些结果为好。 我没有看到在ES一个setOffset和setLimit可能性。 想法?

Answer 1:

它是如何可能返回映射到这些城市所有的人50个城市。

查询您正在寻找这个样子的:

curl -XGET 'http://localhost:9200/users/user/_search?pretty' -d '{
    "aggs": {
        "users-by-city": {
            "terms": {
                "field": "city",
                "size": 50
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {
                        "from": 0,
                        "size": 9000
                    }
                }
            }
        }
    }
}'

在弹性曲线,等效的查询可以创建这样:

$query = new Elastica\Query();
$qb = new Elastica\QueryBuilder();

$query->addAggregation(
    $qb->aggregation()->terms('users-by-city')
        ->setField('city')
        ->setSize(50)
        ->addAggregation(
            $qb->aggregation()->top_hits('top-hits-in-city')
                ->setFrom(0)
                ->setSize(9000)
        )
);

如果你想分页的效果,只是改变传入的参数setFromsetSize



文章来源: How do I group documents in elasticsearch by a single field?