Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python请求查询ElasticSearch时工作不正常_Python_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Python Requests - Fatal编程技术网 elasticsearch,python-requests,Python,elasticsearch,Python Requests" /> elasticsearch,python-requests,Python,elasticsearch,Python Requests" />

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

使用Python请求查询ElasticSearch时工作不正常,python,elasticsearch,python-requests,Python,elasticsearch,Python Requests,我试图使用弹性搜索引擎在mongodb上进行全文搜索,但遇到了一个问题:无论我提供什么搜索词(或者如果我使用query1或query2),引擎都会返回相同的结果。我认为问题在于我提出请求的方式,但我不知道如何解决它 代码如下: def search(search_term): query1 = { "fuzzy" : { "art_text" : { "value" : search_term,

我试图使用弹性搜索引擎在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

我想您的第一个请求应该是:

r = requests.get(uri, data=es_query)
在有人否决我之前,是的HTTP/1.1规范允许数据与GET请求一起发送,是的请求确实支持它

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()

只要快速观察一下就可以了。。。您的“fuzzy”子句是否需要包装在“query”中?因此,结构将变为“查询”:{“模糊”:{…},“过滤器”:{…}。你能发布你从你的请求中得到的结果吗?这样我们就可以尝试看看是否有明显的结果。无论我提供什么搜索词,请求都会返回10项。我不知道我做错了什么。返回的数据是真实的吗?这些文件是有效文件还是其他文件?您是否尝试过一个简单的uri搜索,它将文档类型和搜索参数集于一身?例如:curl-XGET“”。或者是搜索非艺术文本字段的标记的东西。只是想帮你缩小范围