2013-04-10 53 views
7

我試圖用彈性搜索引擎對mongodb數據庫進行全文搜索,但遇到了一個問題:無論我提供什麼搜索術語(或者如果使用query1或query2),引擎總是返回相同的結果。我認爲問題在於我提出請求的方式,但我不知道如何解決它。用Python請求無法正常工作查詢ElasticSearch

下面是代碼:

def search(search_term): 
    query1 = { 
     "fuzzy" : { 
      "art_text" : { 
       "value" : search_term, 
       "boost" : 1.0, 
       "min_similarity" : 0.5, 
       "prefix_length" : 0 
      } 
     }, 
     "filter": { 
      "range" : { 
       "published": { 
        "from" : "20130409T000000", 
        "to": "20130410T235959" 
       } 
      } 
     } 
    } 
    query2 = { 
     "match_phrase": { "art_text": search_term } 
    } 

    es_query = json.dumps(query1) 
    uri = 'http://localhost:9200/newsidx/_search' 
    r = requests.get(uri, params=es_query) 
    results = json.loads(r.text) 
    data = [res['_source']['api_id'] for res in results['hits']['hits'] ] 
    print "results: %d" % len(data) 
    pprint(data) 
+0

只是目測這個快速...貴「模糊」的條款需要包裹「查詢」裏面?所以結構會變成「查詢」:{「fuzzy」:{...}},「filter」:{...}。你可以發佈你的請求的結果,所以我們可以嘗試看看有沒有什麼明顯的。 – Phil 2013-04-11 13:37:05

+0

無論我提供什麼search_term,該請求都會返回10個項目。我不知道我做錯了什麼。 – Rod0n 2013-04-11 19:01:39

+0

數據是真實的嗎?文件是有效的文件,還是其他的?你有沒有嘗試過一個簡單的uri搜索,指定文檔類型和搜索參數?例如:curl -XGET'http:// localhost:9200/newsidx/some_type/_search?q = art_text:hello'。或者,也許是搜索不是art_text字段的標籤的東西。只是想幫助你縮小範圍 – Phil 2013-04-11 22:39:08

回答

16

params參數不用於被髮送的數據。如果您想要將數據發送到服務器,則應特別使用數據參數。如果你試圖發送查詢參數,那麼你不應該對它們進行JSON編碼,而只是把它作爲一個字典給params。

我懷疑你的第一個請求應該是如下:

r = requests.get(uri, data=es_query) 

而且有人downvotes我面前,是在HTTP/1.1規範允許使用GET請求發送的數據,是的請求,不支持它。

+3

沒有人會冷落你! – Steve 2014-05-05 08:54:26