mvc*_*bie 9 elasticsearch sense nest
我通过NEST c#使用ElasticSearch.我有很多关于人的信息
{
firstName: 'Frank',
lastName: 'Jones',
City: 'New York'
}
Run Code Online (Sandbox Code Playgroud)
我希望能够通过lastName对这个项目列表进行过滤和排序,并按长度排序,这样,名字中只有5个字符的人将位于结果集的开头,然后是10个字符的人.
所以对于一些伪代码,我想做类似的事情
list.wildcard("j*").sort(m => lastName.length)
我是ElasticSearch的新手,所以任何例子都会非常有用.
您可以使用基于脚本的排序进行排序.
作为玩具示例,我使用一些文档设置了一个简单的索引:
PUT /test_index
POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"name":"Bob"}
{"index":{"_id":2}}
{"name":"Jeff"}
{"index":{"_id":3}}
{"name":"Darlene"}
{"index":{"_id":4}}
{"name":"Jose"}
Run Code Online (Sandbox Code Playgroud)
然后我可以订购这样的搜索结果:
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
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
要按长度过滤,我可以使用类似的方式使用脚本过滤器:
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
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的代码:
http://sense.qbox.io/gist/22fef6dc5453eaaae3be5fb7609663cc77c43dab
PS:如果任何姓氏包含空格,您可能希望"index": "not_analyzed"在该字段上使用.
| 归档时间: |
|
| 查看次数: |
3964 次 |
| 最近记录: |