|
背景:
在一些示例中,我们看到这样使用 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"}}
]
}' |
|
|