2013-04-10 5 views
7

mongodbデータベースでフルテキスト検索をElastic Searchエンジンで実行しようとしていますが、問題が発生しました。または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

だけ...あなたの「ファジー」句は「クエリ」内にラップする必要がないすぐにこれをeyeballing?構造体は "クエリ"になります:{"ファジー":{...}}、 "フィルタ":{...}。リクエストから得られた結果を投稿することができますので、わかりやすいものがあるかどうか試してみることができます。 – Phil

+0

私が提供しているsearch_termに関係なく、リクエストは10個のアイテムを返します。私が間違っていることはわかりません。 – Rod0n

+0

データが実際に返されますか?書類は有効な書類なのですか?あなたは、ドキュメントタイプと検索パラメータをすべて1つに指定する単純なURI検索を試しましたか?たとえば、curl -XGET 'http:// localhost:9200/newsidx/some_type/_search?q = art_text:hello'です。または、art_textフィールドではないタグを検索するものです。ちょうどあなたが物事を狭めるのを助けることを試みている – Phil

答えて

16

paramsパラメータが送信されたデータのためではありません。ここで

はコードです。サーバーにデータを送信しようとする場合は、具体的にはdataパラメーターを使用する必要があります。クエリパラメータを送信しようとしている場合は、JSONエンコーディングではなく、dictとしてparamsに渡すだけです。

私はあなたの最初の要求は、次のする必要がある疑いがある:

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

そして、誰かが私をdownvotes前に、はいHTTP/1.1の仕様がそれをサポートしないデータは、GETリクエストとはいリクエストと一緒に送信することができます。

+3

誰もあなたをdownvoteしない! – Steve

関連する問題