Dib*_*ish 5 nosql elasticsearch
我有一系列名字.
team dhoni
dhoni1
dibeesh 200
bb vineesh
devan
Run Code Online (Sandbox Code Playgroud)
我想按字母顺序按升序排序(A - Z),如下面的顺序
bb vineesh
devan
dhoni1
dibeesh 200
team dhoni
Run Code Online (Sandbox Code Playgroud)
制图
"first_name": {
"type": "string",
"store": "true"
},
Run Code Online (Sandbox Code Playgroud)
我试过了
{
"sort": [
{
"first_name": {
"order": "asc"
}
}
],
"query": {
"match_all": {
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,我按以下顺序获取名称.
dibeesh 200
bb vineesh
devan
team dhoni
dhoni1
Run Code Online (Sandbox Code Playgroud)
弹性搜索以名字作为首选.
我怎么能阻止这个?
我有一个类似的问题,另一个答案对我来说不太明白。我参考了这个文档,并且能够通过这样的映射来解决
"name": {
"type": "string",
"analyzer": "english",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样查询和排序
{
"query": {
"match": {
"name": "dhoni"
}
},
"sort": {
"name.raw": {
"order": "asc"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为问题是,你的字符串是在写入elasticsearch时分析的.它使用标准分析器,使用带有标准令牌过滤器,小写令牌过滤器和停止令牌过滤器的标准令牌器构建标准型分析器.
这意味着什么,假设您正在使用字段"名称",默认映射(标准分析器).
当你索引时,
team dhoni, --> team, dhoni
dhoni1 --> dhoni1
dibeesh 200 --> dibeesh, 200
Run Code Online (Sandbox Code Playgroud)
等等,
因此,通过排序显然dibeesh200将首先出现.(因为它将按200而不是dibesh排序)
所以,如果你的字符串没有被分析(大写和小写字母的行为不同)或你可以使用简单的分析器(这样你只能按字母排序,无论大写或更低),或者你可以使用多字段来有分析和非分析版本.
这是一种方法,
POST x2/x3/_mapping
{
"x3":{
"properties": {
"name" :{
"type" :"string",
"fields" :{
"raw" :{
"type": "string",
"index_analyzer": "simple"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是查询,
POST x2/x3/_search
{
"sort": [
{
"name.raw": {
"order": "asc"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作.希望这可以帮助!!
| 归档时间: |
|
| 查看次数: |
11367 次 |
| 最近记录: |