使用Python请求查询ElasticSearch不能正常工作

Rod*_*d0n 8 python elasticsearch python-requests

我正在尝试使用Elastic Search引擎对mongodb数据库进行全文搜索,但我遇到了一个问题:无论我提供什么搜索词(或者如果我使用query1或query2),引擎总是会返回相同的结果.我认为问题在于我提出请求的方式,但我不知道如何解决它.

这是代码:

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)
Run Code Online (Sandbox Code Playgroud)

Ian*_*sco 19

params参数不适用于要发送的数据.如果您尝试将数据发送到服务器,则应特别使用data参数.如果您正在尝试发送查询参数,那么您不应该对它们进行JSON编码,只需将它作为dict提供给params.

我怀疑你的第一个请求应该如下:

r = requests.get(uri, data=es_query)
Run Code Online (Sandbox Code Playgroud)

在有人向我投票之前,是的,HTTP/1.1规范允许数据与GET请求一起发送,是的请求确实支持它.