如果我在elaticsearch中有一堆文件,我希望按照文档的一个字段返回,我该怎么做?此外,我需要它始终返回固定数量的结果(使用set maxresults)
例如,如果我有一堆文档,每个文档代表一个人和包含该人的属性的文档的字段。 让我们说每个人在文档中都有一个城市字段。 我想以一种返回50个按城市分组的结果的方式查询Elasticsearch。通过50个结果,我想知道如何将50个映射到这些城市中所有人的城市归还。
我在:
中找到了一个实现但我也想对这些结果应用分页。我在ES中看不到setOffset和setLimit的可能性。想法?
答案 0 :(得分:1)
如何返回映射到这些城市中所有人的50个城市。
查询您正在寻找这样的内容:
String line = "foo,12-12-12,11111,2222,bar,3333,baz";
List<String> ports = Arrays.stream(line.split(",")).filter(s -> s.matches("\\d+")).collect(Collectors.toList());
在Elastica中,可以通过以下方式创建等效查询:
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)
)
);
和setFrom
的参数。