首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElasticSearch中文本字段中的编号排序

ElasticSearch中文本字段中的编号排序
EN

Stack Overflow用户
提问于 2017-07-31 09:19:46
回答 1查看 1.7K关注 0票数 0

在对ElasticSearch中的字段进行排序时,在同一个字段中对文本和数字进行排序时会出现问题。

我的模式是这样的:“文本/数字/年份/文本”。

我试着按这个分类,但我得到了这样的东西:

代码语言:javascript
运行
复制
"hits": [
         {            
            "_source": {
               "fields": {
                  "numbered": "text/1/year/text",
                  "numbered-number": "1"
               }
            },
            "sort": [
               "1"
            ]
         },
         {            
            "_source": {
               "fields": {
                  "numbered": "text/10/year/text",
                  "numbered-number": "10"
               }
            },
            "sort": [
               "10"
            ]
         },
         {            
            "_source": {
               "fields": {
                  "numbered": "text/11/year/text",
                  "numbered-number": "11"
               }
            },
            "sort": [
               "11"
            ]
         },
         ...
          {            
            "_source": {
               "fields": {
                  "numbered": "text/19/year/text",
                  "numbered-number": "19"
               }
            },
            "sort": [
               "19"
            ]
         },
         {            
            "_source": {
               "fields": {
                  "numbered": "text/2/year/text",
                  "numbered-number": "2"
               }
            },
            "sort": [
               "2"
            ]
         },

好吧,ElasticSearch正在整理这个1,10,11,12,.,19,2,20,21.我怎样才能解决这个问题?我只需要自然的感觉。

更新:

我试过这个剧本,但不太管用。

代码语言:javascript
运行
复制
POST myindex/_search
{
   "from": 0,
   "size": 40,
   "sort": [
      {
         "_script": {
            "type": "string",
            "script": {
               "inline": 
               "if ('fields.myfield.sort' =~ /\\d+/) { return Integer.parseInt(doc['fields.myfield.sort'].value); }"               
            },
            "order" : "asc"

         }
      }
   ],
    "_source": { "include": ["fields.myfield"] }
}

错误

代码语言:javascript
运行
复制
"reason": {
               "type": "null_pointer_exception",
               "reason": null
EN

回答 1

Stack Overflow用户

发布于 2017-07-31 13:12:58

您可以使用脚本排序对整数值进行排序,而不是按字典顺序排序(这就是文本的排序方式)。

代码语言:javascript
运行
复制
var searchResponse = client.Search<MyDocument>(s => s
    .Sort(so => so
        .Script(ss => ss
            .Script(sc => sc
                .Inline("Integer.parseInt(doc['numbered-number'].value)")
            )
        )
    )
);

然而,更好的方法是显式地字段作为整数。这样做,您将能够按预期在字段上排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45411917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档