Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >弹性搜索中的意外(不区分大小写)字符串排序

弹性搜索中的意外(不区分大小写)字符串排序
EN

Stack Overflow用户
提问于 2014-02-28 07:59:37
回答 3查看 8.2K关注 0票数 5

我有一个控制台平台列表,我正在Elasticsearch中对其进行排序。

以下是"name“字段的映射:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "name": {
        "type": "multi_field",
        "fields": {
            "name": {
                "type": "string",
                "index": "analyzed"
            },
            "sort_name": {
                "type": "string",
                "index": "not_analyzed"
            }
        }
    }
}

当我执行以下查询时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "match_all": {}
  },
    "sort": [
        {
          "name.sort_name": { "order": "asc" }
        }
    ],
    "fields": ["name"]
}

我得到了以下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "failed": 0
    },
    "hits": {
        "total": 17,
        "max_score": null,
        "hits": [
            {
                "_index": "platforms",
                "_type": "platform",
                "_id": "1393602489",
                "_score": null,
                "fields": {
                    "name": "GameCube"
                },
                "sort": [
                    "GameCube"
                ]
            },
            {
                "_index": "platforms",
                "_type": "platform",
                "_id": "1393602490",
                "_score": null,
                "fields": {
                    "name": "Gameboy Advance"
                },
                "sort": [
                    "Gameboy Advance"
                ]
            },


    {
            "_index": "platforms",
            "_type": "platform",
            "_id": "1393602498",
            "_score": null,
            "fields": {
                "name": "Nintendo 3DS"
            },
            "sort": [
                "Nintendo 3DS"
            ]
        },

        ...remove for brevity ...

        {
            "_index": "platforms",
            "_type": "platform",
            "_id": "1393602493",
            "_score": null,
            "fields": {
                "name": "Xbox 360"
            },
            "sort": [
                "Xbox 360"
            ]
        },
        {
            "_index": "platforms",
            "_type": "platform",
            "_id": "1393602502",
            "_score": null,
            "fields": {
                "name": "Xbox One"
            },
            "sort": [
                "Xbox One"
            ]
        },
        {
            "_index": "platforms",
            "_type": "platform",
            "_id": "1393602497",
            "_score": null,
            "fields": {
                "name": "iPhone/iPod"
            },
            "sort": [
                "iPhone/iPod"
            ]
        }
    ]
}

所有东西都按预期排序,除了iPhone/iPod结果在末尾(而不是在GameBoy前进之后)--为什么名称中的/会对排序产生影响?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-28 08:41:07

好的,我发现原因与/无关。ES将按大写字母和小写字母进行排序。

我在创建索引的settings中添加了一个自定义分析器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "analysis": {
        "analyzer": {
            "sortable": {
                "tokenizer": "keyword",
                "filter": [
                    "lowercase"
                ]
            }
        }
    }
}

然后,在字段映射中,我将'analyzer': 'sortable'添加到sort_name多字段。

票数 17
EN

Stack Overflow用户

发布于 2021-07-20 03:43:26

使用规范化器with关键字来处理排序

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-normalizers.html#analysis-normalizers

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT index_name
{
  "settings": {
    "analysis": {
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "char_filter": ["quote"],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "normalizer": "my_normalizer"
      }
    }
  }
}

可以像这样修改搜索查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "match_all": {}
  },
    "sort": [
        {
          "name.sort_name": { "order": "asc" }
        }
    ],
    "fields": "name.keyword"
}
票数 1
EN

Stack Overflow用户

发布于 2022-01-04 23:29:09

根据https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-normalizers.html (ElasticSearch 7.16) .

Elasticsearch附带一个小写内建规范器。

因此,您可以定义一个附加字段(在下面的示例“lowersortable”中):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /myindex/_mapping
{
  "properties": {
    "myproperty": {
      "type": "text",
      "fields": {
        "lowersortable": {
          "type": "keyword",
          "normalizer": "lowercase"
        }
      }
    }
  }
}

..。并使用此字段myproperty.lowersortable在搜索查询中进行排序。

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

https://stackoverflow.com/questions/22099906

复制
相关文章
Windows Azure Pack 安装部署
Windows Azure Pack作为微软新推出的云管理与租用门户,拥有与公有云Windows Azure接近的用户体验,并且能够将私有云与公有云完美结合起来,在之前的文章中有了相关的简单介绍。下面我们就来看一看Windows Azure Pack是如何一步步实现私有云的管理的。
李珣
2019/03/14
1.3K0
Azure部署Azure Stack技巧
Azure Stack混合云的POC正式版已经发布了,盆盆已经写了十余篇有关Azure Stack的文章,您可以点击公众号右下方的菜单去阅读,有图有真相!
盆盆
2019/04/24
1.3K0
Azure部署Azure Stack技巧
Hadoop单节点安装部署
机器环境 Distributor ID: CentOS Description: CentOS release 5.8 (Final) Release: 5.8 Codename: Final jdk 版本 java version "1.6.0_45"
星哥玩云
2022/07/04
7330
Flink单节点安装部署
1)下载安装包 2)上传安装包 3)解压 cd /root tar -zxvf flink-1.6.2-bin-hadoop28-scala_2.11.tgz -C hd 4)启动 cd /root/hd/flink-1.6.2 bin/start-cluster.sh 5)停止 cd /root/hd/flink-1.6.2 bin/stop-cluster.sh 6)访问ui界面 http://192.168.6.6:8081
编程那点事
2023/02/25
6090
Microsoft Azure 以太坊节点自动化部署方案漏洞分析
作者:sunsama@知道创宇404区块链安全研究团队 时间:2018/07/10
Seebug漏洞平台
2018/07/26
6020
Microsoft Azure 以太坊节点自动化部署方案漏洞分析
Microsoft Azure 以太坊节点自动化部署方案漏洞分析
为了迎合以太坊区块链1发展需求,Microsoft Azure2早在2016年9月九推出了以太坊节点走自动部署的模块。部署情况如下:
Seebug漏洞平台
2018/07/12
1.1K0
Azure上一键部署Azure Stack
方便在Azure Global上创建Azure Stack ASDK POC环境。可以访问以下github站点:
盆盆
2019/04/24
5400
Azure上一键部署Azure Stack
Microsoft Azure部署MYSQL-MMM(1)安装MYSQL
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
李珣
2019/03/14
6710
Azure上一键部署Azure Stack
要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:
盆盆
2019/03/05
3400
Azure上一键部署Azure Stack
Kubernetes-v1.24版安装部署之Mater节点安装部署
Kubernetes Master节点部署三个服务:kube-apiserver、kube-controller-manager、kube-scheduler和一个命令工具kubectl.
王先森sec
2023/04/24
4580
kafka单节点的安装,部署,使用
1、kafka官网:http://kafka.apache.org/downloads
别先生
2019/01/07
1.5K0
Kubernetes-v1-24版安装部署之Node节点安装部署
大家可以发现k8s所有组件都安装完成后集群状态还是NotReady,这里通过kubelet报错就会发现缺少网络组件,这里就不介绍了,详情可以看我另一篇文章。
王先森sec
2023/04/24
7140
Kubernetes-v1-24版安装部署之Node节点安装部署
如何安装 TypeScript,并配置开发环境以便开始使用
TypeScript 是一种由微软开发的静态类型编程语言,它可以作为 JavaScript 的超集使用,并且可以在编译时进行类型检查。TypeScript 提供了更强大的工具和功能,使开发者能够更轻松地编写可维护、可扩展的代码。本文将详细介绍如何安装 TypeScript,并配置开发环境以便开始使用。
网络技术联盟站
2023/07/06
1.1K0
盆盆的原创Azure Stack文档和视频
自打2015年5月微软Build大会宣布研发Azure Stack,一直到前不久微软Tech Sumit上CEO亲自宣布Azure Stack上市,盆盆一直都是这个产品的最忠实拥趸,也在华来四上发表了大量的原创技术文章。在学习和研究的过程中,盆盆积累了不少的原创视频和文档,敝帚不敢自珍,在此分享给诸位同好。
盆盆
2019/04/24
6890
在Azure Stack上部署Kubernetes
要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:
盆盆
2019/03/05
7740
在Azure Stack上部署Kubernetes
在Azure Stack上部署Kubernetes
Azure Stack是我们实现DevOps的重要利器,而要实现DevOps,离不开容器编排平台Kubernetes的支持。本文将介绍如何在Azure Stack ASDK环境里部署Kubernetes,在AKS for Azure Stack Mooncake正式发布之前,可以让我们更方便地进行测试。
盆盆
2019/04/24
6870
在Azure Stack上部署Kubernetes
国内账号部署Azure私有云,该如何搞定App Service?
可能您会说,前段时间不是已经写过一篇类似的文章了吗?(参考这里Azure Stack App Service部署测试),由于那篇文章介绍的是TP3 Refresh,而正式版略有些不同,二来有读者反馈希望能写得更加详细一些,所以借着这次正式版发布,再写篇长文章。
盆盆
2019/04/24
2.5K0
国内账号部署Azure私有云,该如何搞定App Service?
于Heroku平台部署maven webapp(java web)工程
web: java JAVA_OPTS -jar target/dependency/jetty-runner.jar –port PORT target/tangshiyi.war
全栈程序员站长
2022/07/06
1.2K0
使用Github部署Azure应用服务
上次我们介绍了如何使用Azure应用服务(不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序)。我们通过Visual studio新建一个项目后手动编译发布代码。然后通过FTP上传我们的发布文件。整个过程跟我们手动发布项目到IIS上其实没啥差别。 这么操作有点繁琐,显然在这年头也有点过时了。这次我们来玩一下azure应用比较高级的持续部署。说高级其实也很简单,Azure现在跟github有比较深入的集成,只有通过鼠标点几下,立马就完成了。 话不多说,下面就演示下吧。
MJ.Zhou
2020/12/16
7470
使用Github部署Azure应用服务
点击加载更多

相似问题

部署Azure App时无法安装节点模块

27

Azure webapp部署

110

Azure CLI - Webapp部署

10

WebApp部署到Azure

23

从(VSO)部署Azure WebApp

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文