我正在尝试使用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)
答案 0 :(得分:18)
params
参数不适用于要发送的数据。如果您尝试将数据发送到服务器,则应特别使用data参数。如果您正在尝试发送查询参数,那么您不应该对它们进行JSON编码,只需将它作为dict提供给params。
我怀疑你的第一个请求应该如下:
r = requests.get(uri, data=es_query)
在有人向我投票之前,是的,HTTP / 1.1规范允许使用GET请求发送数据,是的请求确实支持它。
答案 1 :(得分:-2)
search = {'query': {'match': {'test_id':13} }, 'sort' {'date_utc':{'order':'desc'}} }
data = requests.get('http://localhost:9200/newsidx/test/_search?&pretty',params = search)
print data.json()