
您可以使用基于脚本的排序进行排序。
作为一个玩具示例,我用一些文档建立了一个琐碎的索引:
PUT /test_indexPOST /test_index/doc/_bulk{"index":{"_id":1}}{"name":"Bob"}{"index":{"_id":2}}{"name":"Jeff"}{"index":{"_id":3}}{"name":"Darlene"}{"index":{"_id":4}}{"name":"Jose"}然后,我可以订购这样的搜索结果:
POST /test_index/_search{ "query": { "match_all": {} }, "sort": { "_script": { "script": "doc['name'].value.length()", "type": "number", "order": "asc" } }}...{ "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 4, "max_score": null, "hits": [ { "_index": "test_index", "_type": "doc", "_id": "1", "_score": null, "_source": { "name": "Bob" }, "sort": [ 3 ] }, { "_index": "test_index", "_type": "doc", "_id": "4", "_score": null, "_source": { "name": "Jose" }, "sort": [ 4 ] }, { "_index": "test_index", "_type": "doc", "_id": "2", "_score": null, "_source": { "name": "Jeff" }, "sort": [ 4 ] }, { "_index": "test_index", "_type": "doc", "_id": "3", "_score": null, "_source": { "name": "Darlene" }, "sort": [ 7 ] } ] }}要按长度过滤,我可以通过类似的方式使用脚本过滤器:
POST /test_index/_search{ "query": { "filtered": { "query": { "match_all": {} }, "filter": { "script": { "script": "doc['name'].value.length() > 3", "params": {} } } } }, "sort": { "_script": { "script": "doc['name'].value.length()", "type": "number", "order": "asc" } }}...{ "took": 3, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 3, "max_score": null, "hits": [ { "_index": "test_index", "_type": "doc", "_id": "4", "_score": null, "_source": { "name": "Jose" }, "sort": [ 4 ] }, { "_index": "test_index", "_type": "doc", "_id": "2", "_score": null, "_source": { "name": "Jeff" }, "sort": [ 4 ] }, { "_index": "test_index", "_type": "doc", "_id": "3", "_score": null, "_source": { "name": "Darlene" }, "sort": [ 7 ] } ] }}这是我使用的代码:
http://sense.qbox.io/gist/22fef6dc5453eaaae3be5fb7609663cc77c43dab
PS: 如果任何姓氏包含空格,则可能要
"index":"not_analyzed"在该字段上使用。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)