关于python的elasticsearch 客户端pyes 中search方法的sort参数

背景: 

 

在一些示例中,我们看到这样使用 sort 

 

q = Search(BoolQuery(must=[qpublished],should=[qtitle,qcontent]),highlight=h, start=0, size=3, sort={'id': {'order': 'asc'}})

 

FROM http://www.verydemo.com/demo_c152_i10112.html 

 

问题: 

但是经过我在自己的数据上试验, 一个long类型的字段无法排序,出来的结果莫名其妙。。。而且切换 asc和desc都没有变化的,也就是说压根sort设置没生效。 但是如果只设置sort的field,而不指定order,就一切都OK,默认按score排序。 

 

排解:

查看源码可以知道 https://github.com/aparo/pyes/blob/master/pyes/es.py 

 

pyes 对于sort这样的参数,直接将值传给了和HTTP请求,所以理论上只要遵循elasticsearch的HTTP JSON请求格式即可。

 

验证:

既然如此,那么我们试试 curl 设置 sort参数和pyes设置sort参数的返回有何异同。

 

 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html 

 

{
    "sort" : [
        { "post_date" : {"order" : "asc"}},
        "user",
        { "name" : "desc" },
        { "age" : "desc" },
        "_score"
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

 

命令行 CURL

curl -XPOST 'localhost:9200/_search' -d '{
   "query" : {
    ...
   },
   "sort" : [
      {"price" : {"order" : "asc", "mode" : "avg"}}
   ]
}'

 

你可能感兴趣的:(elasticsearch,python,sort,pyes,order)