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