【发布时间】:2018-11-14 01:27:57
【问题描述】:
我有一组地址。让我们简化并说唯一的字段是postcode、city、street、streetnumber 和name。
当用户输入邮政编码、城市和一些街道查询时,我希望能够建议街道列表。
例如,如果用户在 HTML 表单中输入:
postcode: 75010
city: Paris
street: rue des
我想要一个街道列表
'rue des petites écuries'
'rue des messageries'
...
'rue du faubourg poissonnière'
...
我可以向用户建议。
所以,我想获取“street”字段的唯一值列表,根据它们与我在“street”字段上的查询的匹配程度进行排序。我想获得此查询的 10 条最佳匹配街道。
返回文档的查询如下所示:
{
"query": {
"bool": {
"must": [
{{"term": {"postcode": "75010"}},
{{"term": {city": "Paris"}},
{{"match": {"street": "rue des"}}
]
}
}
}
当然,同一条街道会出现多次,因为每条街道可以在集合中的不同地址出现多次。
我尝试使用“聚合”框架并添加了一个 aggs:
{
"query": {
"bool": {
"must": [
{{"term": {"postcode": "75010"}},
{{"term": {city": "Paris"}},
{{"match": {"street": "rue des"}}
]
}
},
"aggs": {
"street_agg": {
"terms": {
"field": "street",
"size": 10
}
}
}
}
问题是它是自动排序的,不是根据分数,而是根据每个桶的文档数。
我希望根据每个存储桶中选择的任意文档的分数对存储桶进行排序(是的,从存储桶中的单个文档中获取分数就足够了,因为分数仅取决于街道的内容我的示例中的字段)。
您将如何实现这一目标?
【问题讨论】:
标签: sorting elasticsearch unique distinct distinct-values