1

基于每个返回的结果显示索引范围计数首先我道歉,如果我使用的术语是不正确的,我正在学习一天elasticsearch一天,也许使用不正确的短语。Elasticsearch - 从给定的期限

花费数天试图弄清楚这一点,并拉我的头发后,我似乎击中砖墙的每次。

我试图让elasticsearch为每个返回结果的文件数,我将在下面提供一个例子..


{ 
    "suggest": { 
    "text": "aberdeen", 
    "city": { 
     "completion": { 
     "field": "city_suggest", 
     "size": "2" 
     } 
    }, 
    "street": { 
     "completion": { 
     "field": "street_suggest", 
     "size": "2" 
     } 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "meta": { 
     "filter": { 
     "term": { 
      "city.raw": "aberdeen" 
     } 
     }, 
     "aggs": { 
     "name": { 
      "terms": { 
      "field": "city.raw" 
      } 
     } 
     } 
    } 
    } 
} 

上面的查询返回以下结果:

{ 
    "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 
      } 
     ] 
     } 
    ] 
    } 
} 

的结果我试图做到的,是让每个返回的结果的总体文件数量,使得例如,"Davidson House, Aberdeen, AB15"返回的街道地址会说多少文件索引匹配这个指定的地址,这将被重复用于每个结果和相同对于这个城市来说,与总体城市目前显示整体数量的方式类似。

{ 
    "key": "Aberdeen", 
    "doc_count": 119196 
    } 

这里是在生产类似的例子

example of desired results


我相信我还面临着聚合是我不知道将要返回的值的问题否则我可以与聚合预定义他们像我一样这样的城市,要求每个给定的结果,这样的整体数量。

为了帮助给了我是如何想象的结果,是我会告诉我如何描绘的是可能的工作成果要像一个整体例如:

"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版本恩而言,我使用,我有两台dev服务器运行elasticsearch 2.3和5.5,看看是否有更新版本的elasticsearch会有所作为,不幸的是,我得到了短暂的,所以我一直在使用2.3,赞成5.5

任何帮助或建议将不胜感激,谢谢大家。

回答

2

您需要在两个分裂查询。首先使用建议API收集建议,然后对结果运行聚合。该解决方案的缺点是,你有一个快疯了建议(小于一毫秒,如果你幸运的话),对较长的运行聚合。如果那对你有好处,这可能是一个好方法。

另一个想法可能是有预先聚集的数据的自己的建议指标,包含这样的数 - 该指数被在后台regurlarly重建。

+0

空气,首先非常感谢您抽出宝贵时间来伸出援手。我一直希望有人能提供一些线索这光,我从字面上看每个教程中,我能找到,但他们都指的总体情况并没有什么我能找到的是类似于我想要的结果,虽然我可能寻找不正确的术语。至于后面的选项(对于每个给定的建议,具有预定义计数的专用索引,我确实考虑过这一点,因为我们的地址数据每3个月只更改一次,这是非常小的更改,不需要完整的重新索引).... – Birdy

+0

你会从这两者推荐什么?我想试验和错误将是一个起点。您能否提供任何示例来说明如何通过多个查询来实现第一个选项,以帮助了解如何在第二个查询中汇总结果。 – Birdy