2016-01-06 23 views
0

我想通過下面的代碼片段得到一些地理數據出來ES時:Unhashable型「快譯通」試圖發送一個Elasticsearch地理查詢

result = es.search(
    index="loc", 
    body={ 
     { 
      "filtered" : { 
       "query" : { 
        "field" : { "text" : "restaurant" } 
       }, 
       "filter" : { 
        "geo_distance" : { 
         "distance" : "12km", 
         "location" : { 
          "lat" : 40, 
          "lon" : -70 
         } 
        } 
       } 
      } 
     } 
    } 
) 

查詢但不成功由於以下錯誤:

"lon" : -70 
TypeError: unhashable type: 'dict' 

位置字段被正確地映射到geo_point類型和查詢從official examples服用。我編寫查詢的方式有問題嗎?

回答

1

您在set中嵌套dict。移除外部大括號來解決問題。這個錯誤源於set,dicts不能包含不可取的集合,例如字典(謝謝@Matthias)。

body= 
     { 
      "filtered" : { 
       "query" : { 
        "field" : { "text" : "restaurant" } 
       }, 
       "filter" : { 
        "geo_distance" : { 
         "distance" : "12km", 
         "location" : { 
          "lat" : 40, 
          "lon" : -70 
         } 
        } 
       } 
      } 
     } 
+0

確切的說:外部culy大括號試圖定義一個'set'和一個'set'不能包含不可對象(如'dict')。 – Matthias

+0

啊,真的,真的忘了使用'{}'定義一個集合的可能性,謝謝 – mic4ael

+0

我完全錯過了外層花括號。我的ES設置也有錯誤,所以即使沒有設置大括號也會出現另一個錯誤。現在一切都是固定的。非常感謝你! – alexdeloy