elasticsearch Elasticsearch-显示基于给定术语的每个返回结果的索引范围计数
首先,如果我使用的术语不正确,我道歉,因为我每天都在学习elasticsearch,可能会使用不正确的短语 在花了几天的时间试图弄明白这一点,并把我的头发拔出来之后,我似乎每次都在碰壁 我试图让elasticsearch为每个返回的结果提供一个文档计数,我将在下面提供一个示例elasticsearch Elasticsearch-显示基于给定术语的每个返回结果的索引范围计数,elasticsearch,lucene,full-text-search,aggregate,aggregation,elasticsearch,Lucene,Full Text Search,Aggregate,Aggregation,首先,如果我使用的术语不正确,我道歉,因为我每天都在学习elasticsearch,可能会使用不正确的短语 在花了几天的时间试图弄明白这一点,并把我的头发拔出来之后,我似乎每次都在碰壁 我试图让elasticsearch为每个返回的结果提供一个文档计数,我将在下面提供一个示例 上述查询返回以下结果: { "took": 37, "timed_out": false, "_shards": { "total": 5, "successful": 5, "fa
上述查询返回以下结果:
{
"took": 37,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1870535,
"max_score": 0,
"hits": []
},
"aggregations": {
"meta": {
"doc_count": 119196,
"name": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Aberdeen",
"doc_count": 119196
}
]
}
}
},
"suggest": {
"city": [
{
"text": "Aberdeen",
"offset": 0,
"length": 8,
"options": [
{
"text": "Aberdeen",
"score": 100
}
]
}
],
"street": [
{
"text": "Aberdeen",
"offset": 0,
"length": 8,
"options": [
{
"text": "Davidson House, Aberdeen, AB15",
"score": 80
},
{
"text": "Bruce House, Aberdeen, AB15",
"score": 80
}
]
}
]
}
}
我试图实现的结果是对每个返回的结果进行总体文档计数,例如,返回的街道地址
“Aberdeen Davidson House,AB15”
将说明索引中有多少文档与此给定地址匹配,并且将对每个结果重复此操作,对城市重复此操作,与聚合城市当前显示总体计数的方式类似
{
"key": "Aberdeen",
"doc_count": 119196
}
这是一个生产中类似的例子
我相信我面对的聚合问题是,我不知道将返回的值,否则我可以使用聚合预定义它们,就像我对城市所做的那样,从而要求以这种方式对每个给定结果进行总体计数 为了帮助给出一个我如何描绘结果的整体示例,我将展示我如何描绘可能的工作结果:
"suggest": {
"city": [
{
"text": "Aberdeen",
"offset": 0,
"length": 8,
"options": [
{
"text": "Aberdeen",
"score": 100,
"total_addresses": 196152
}
]
}
],
"street": [
{
"text": "Aberdeen",
"offset": 0,
"length": 8,
"options": [
{
"text": "Davidson House, Aberdeen, AB15",
"score": 80,
"total_addresses": 158
},
{
"text": "Bruce House, Aberdeen, AB15",
"score": 80,
"total_addresses": 30
}
]
}
]
}
就我正在使用的elasticsearch版本而言,我有两个运行elasticsearch 2.3和5.5的开发服务器,以查看较新版本的elasticsearch是否会有所不同。不幸的是,我遇到了问题,所以我一直使用2.3支持5.5
非常感谢您提供的任何帮助或建议。您需要将查询一分为二。首先使用suggest API收集建议,然后对结果运行聚合。这种解决方案的缺点是,对于运行时间较长的聚合,您有一个疯狂的快速建议(如果幸运的话,不到一毫秒)。如果这对你来说没问题,这可能是一个好方法
另一个想法可能是使用预先聚合的数据创建自己的建议索引,其中包含这样一个计数-此索引会定期在后台重新创建。air,首先非常感谢您抽出时间伸出援助之手。我一直希望有人能对此有所了解,因为我已经阅读了我能找到的每一篇教程,但它们都是指一般的聚合,我能找到的任何东西都与我想要的结果相似,尽管我可能在搜索不正确的术语。至于后面的选项(专用索引,每个给定的建议都有预定义的计数,我考虑了这个问题,因为我们的地址数据每3个月只改变一次,这是非常小的变化,不需要一个完整的重新索引)……你会从这两个方面推荐什么?我想尝试和错误将是一个起点。您能否提供一些示例,说明如何使用多个查询实现第一个选项,以帮助理解我将如何在第二个查询中聚合结果。
"suggest": {
"city": [
{
"text": "Aberdeen",
"offset": 0,
"length": 8,
"options": [
{
"text": "Aberdeen",
"score": 100,
"total_addresses": 196152
}
]
}
],
"street": [
{
"text": "Aberdeen",
"offset": 0,
"length": 8,
"options": [
{
"text": "Davidson House, Aberdeen, AB15",
"score": 80,
"total_addresses": 158
},
{
"text": "Bruce House, Aberdeen, AB15",
"score": 80,
"total_addresses": 30
}
]
}
]
}