我正在尝试使用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)
该params参数不适用于正在发送的数据。如果要尝试将数据发送到服务器,则应特别使用data参数。如果您尝试发送查询参数,则不应对它们进行JSON编码,而应将其作为dict传递给params。
params
我怀疑您的第一个要求应该是:
r = requests.get(uri, data=es_query)
在有人拒绝我投票之前,是的,HTTP / 1.1规范允许数据与GET请求一起发送,是的,请求确实支持它。