2015-04-17 52 views
0

我目前正試圖通過Python查詢ES,使用elasticsearch-py但沒有成功......我正在測試「elasticsearch-head」插件上的請求,它工作正常(結果出來得分)elasticsearch-py不能用腳本查詢

然而,當我在Python做事情似乎是錯誤的,但我得到了相同的結果,他們沒有正確拿下......

這裏是代碼:

custom_query={ 
    "query": { 
    "function_score": { 
     "query": { 
     "match_all": {} 
     }, 
     "functions": [ 
     { 
      "script_score": { 
      "lang": "groovy", 
      "script": "_score+20", 
      "params":{"myMap":{}} 
      } 
     } 
     ] 
    } 
    } 
} 

這是我的自定義查詢,非常簡單,只是爲了測試我的得分chanism。

src = es.search(index=['test'],scroll='60s',search_type='scan',size=10,body=custom_query) 

現在我測試一下:

while(1): 
    src = es.scroll(scroll_id=sid, scroll='60s') 
    sid = src['_scroll_id'] 
    kws.extend(src['hits']['hits']) 

這一切都給人是一組已經取得了不正確的結果......我甚至已啓用「_explanation」明白如果腳本正在使用... 這個意思: - 「_score」 始終爲0 - 「_explanation」 顯示是這樣的:

{ 
    'description': 'function score', 
    product of:'', 
     'value': 21.0, 
     'details': [ 
      { 
       'description': 'ConstantScore(*:*)', 
       product of:'', 
        'value': 1.0, 
        'details': [ 
         {'description': 'boost', 'value': 1.0}, {'description': 'queryNorm', 'value': 1.0} 
        ] 
      }, 
      { 
       'description': 'Math.min of', 
       'value': 21.0, 
       'details': [ 
        { 
         'description': 'script score function', 
         computed with script:"return _score+30;" and parameters: \n{myMap={}}', 'value': 21.0 
        }, 
        { 
         'description': 'maxBoost', 
         'value': 3.4028235e+38 
        } 
       ] 
      }, 
      { 
       'description': 'queryBoost', 
       'value': 1.0 
      } 
     ] 
} 
+0

您會得到什麼錯誤?你的問題似乎就像在你的意圖之前就被切斷了。 –

+0

我沒有收到任何錯誤。對不起,我有點錯過了結束部分,現在更新問題:D – besnico

+0

這似乎是你正在做一個match_all查詢,而不是實際傳遞任何東西來搜索,所以顯然ES沒有任何東西得分。您要求ES返回所有沒有搜索詞的文檔,因此它無法對文檔進行評分......您需要執行類似布爾查詢而不是match_all的操作。 –

回答

0

看來問題與ElasticSearch本身...「搜索類型」:「掃描」不允許評分多個結果。

有關此問題的更全面說明,請參閱here