如何在不更改设置的情况下不区分大小写排序

2024-05-06

我的索引名称是 data_new

下面是插入索引的代码

test = [   {'id':1,'name': 'A', 'professor': ['Bill Cage', 'accounting']},
    { 'id':2,  'name': 'AB', 'professor': ['Gregg Payne', 'engineering']},
    {'id':3,   'name': 'a',   'professor': ['Bill Cage', 'accounting']},
    {'id':4,'name': 'Tax Accounting 200', 'professor': ['Thomas Baszo', 'finance']},
    {'id':5,'name': 'Capital Markets 350', 'professor': ['Thomas Baszo', 'finance']},
    {'id':6,'name': 'Theatre 410', 'professor': ['Sebastian Hern', 'art']},
    {'id':7,'name': 'Accounting 101', 'professor': ['Thomas Baszo', 'finance']},
    {'id':8,'name': 'Marketing 101', 'professor': ['William Smith', 'finance']},
    {'id':8,'name': 'Anthropology 230', 'professor': ['Devin Cranford', 'history']},
    {'id':10,   'name': 'Computer Science 101',
        'professor': ['Gregg Payne', 'engineering']}]
from elasticsearch import Elasticsearch
import json
es = Elasticsearch()
es.indices.create(index='data_new', ignore=400)
for e in test:
        es.index(index="data_new", body=e, id=e['id'])
search = es.search(index="data_new", body={"from" : 0, "size" : 2,"query": {"match_all": {}}})
search['hits']['hits']

现在

[{'id':1,'name': 'A'},
{ 'id':2,  'name': 'AB'},
{'id':3,   'name': 'a'}]

预计按以下顺序排列

[{'id':1,'name': 'A'},
{ 'id':3,  'name': 'a'},
{'id':2,   'name': 'AB'}]

用于输入["a", "b", "B", "C", "c", "A"] 结果是: ["A", "B", "C", "a", "b", "c"]

我想要输出为["A", "a", "B", "b", "C", "c"]

预计出

我的第一个预期输出 > 我需要仅在 {Case insensitive} 中根据名称对输出进行排序。我需要规范名称关键字并排序

如何进行修改search = es.search(index="data_new", body={"from" : 0, "size" : 2,"query": {"match_all": {}}})

我已经用下面的代码更新了search = es.search(index="data_new", body={ "sort" : [{"name.keyword" : {"order" : "asc"}], {"size": 1000, "query": {"query_string": {"query": "A"}}})

with "normalizer": "case_insensitive"}我收到错误

RequestError: RequestError(400, 'x_content_parse_exception', '[1:41] [field_sort] unknown field [normalizer]')


为了做到这一点,你必须使用一个脚本ctx._source.mykey.toLowerCase() https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-sort-context.html https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-sort-context.html

你可以找到另一篇讨论它的帖子:Elasticsearch 日期字段基于脚本的排序 https://stackoverflow.com/questions/32933085/script-based-sorting-on-elasticsearch-date-field还有一篇很好的文章,这里有一个例子:https://qbox.io/blog/how-to-painless-scripting-in-elasticsearch https://qbox.io/blog/how-to-painless-scripting-in-elasticsearch

代码看起来像(未测试)

{
 "query": {
   "match_all": {}
 },
 "sort": {
   "_script": {
     "type": "string",
     "order": "asc",
     "script": {
       "lang": "painless",
       "inline": "doc['name.keyword'].value.toLowerCase()"
     }
   }
 }
}

注意:这是一种不好的做法,您应该只针对一次性查询执行此操作。如果您希望您的应用程序保持健康,您应该实施 saeednasehi 建议的解决方案。 您还可以使用索引排序来提高性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不更改设置的情况下不区分大小写排序 的相关文章

随机推荐

  • Clojure 中 with-local-vars 和 with-bounds 之间的区别

    Clojure 的文档with local vars http clojuredocs org clojure core clojure core with local vars and with bindings http clojure
  • 标记内嵌套块级元素...对还是错?

    嵌套在语法和语义上是否正确 div 或任何其他块级元素内 p 标签 我说的是 HTML4 过渡 DTD 如果没有那么可以使用 span style display block 反而 从语法上来说 一个div里面一个p在所有 HTML 标准中
  • 第 100 次避免循环导入

    Summary 我继续有一个ImportError在一个复杂的项目中 我已经将其蒸馏到仍然会出现错误的最低限度 Example 巫师有装有绿色和棕色药水的容器 这些可以添加在一起 产生同样是绿色或棕色的新药水 我们有一个PotionABC
  • 源单元“_BuildScript_”中“语义分析”阶段出现异常

    评估根项目 android 时出现问题 配置项目 app 时出现问题 无法打开构建文件 C Users InFED Laptop Documents GitHub sustain and save android app build gra
  • C++ 按值而不是按引用将数组发送到函数

    我的 C 有问题 我有一个对数组进行排序的函数 但我不想处理原始数组 我想通过值而不是通过引用将数组发送到函数 请帮我 int bogoSort int tab int n int iloscOperacjiDominujacych 0 c
  • OpenGL 中连续暂停

    void keyPress unsigned char key int x int y int i switch key case f i 3 while i x pos 3 sleep 100 glutPostRedisplay 上面是在
  • 使用事件处理程序与覆盖事件触发方法

    我正在创建 Button 的子类 并希望向其某些事件 例如 OnClick 添加自定义功能 哪种方式更理想 我是否重写 OnClick protected override void OnClick EventArgs e base OnC
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 如何使用 Lint Option StopShip 使 Grade 发布构建失败?

    我读过很多关于StopShipAndroid Lint Check 和 Gradle 支持 http tools android com tips lint checks http tools android com tips lint c
  • 尝试初始化 AudioRecord 时出现“无法获取记录源 1 的音频输入”

    当尝试初始化 AudioRecord 对象并尝试使用 Eclipse 使用模拟器录制声音时 我不断收到此错误 我尝试过各种位采样率 8000 是唯一有效的 但错误仍然出现 我尝试过各种版本的sdk 1 5 1 6 2 2 2和2 3 1 以
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • java.lang.String 无法转换为 org.json.simple.JSONObject simple-json

    我在尝试使用 google 的 simple json 解析简单的 json 时遇到奇怪的问题 这是我的代码 它不起作用 String s args 0 toString JSONObject json JSONObject new JSO
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • Cookie 不会重置

    好吧 我被难住了 我已经盯着这个看了好几个小时了 我使用以下代码在 access login php 设置 cookie setcookie username username time 604800 当我尝试注销 位于 access lo
  • 使用firebase实时数据库创建搜索功能

    我想使用 firebase 实时数据库为我的应用程序创建一个搜索功能 类似于 facebook 搜索 我做了一些研究并承认 Firebase 实时无法使用 文本包含 进行搜索 但我相信必须有一些方法来实现它 例如组合 startAt 或 e
  • 在函数内部使用时,c 数组大小会发生变化

    我有这段代码 include
  • 捕获 CommandOnCooldown 错误

    我正在制作一个有冷却时间的不和谐机器人 并且我正在尝试制作一个事件 当CommandOnCooldown发生错误时 机器人会通过私信告诉他们需要等待多长时间 这是我的代码 看起来一切正常 但它不知道 retry after 意味着什么 bo
  • 在 matplotlib 中添加新的导航模式

    我正在编写一个 wx matplotlib 应用程序 并且在向 matplotlib 导航工具栏添加新工具时遇到相当大的困难 基本上我想添加选择工具 选取框 套索等 以切换受控子图的鼠标模式 到目前为止 我还没有找到任何功能可以让我轻松地做
  • 在 python 中将数组作为参数传递

    我是Python新手 现在我需要声明大小为 20 的数组并将该数组传递给函数 需要数组的函数如下 function args The args是一个输入function 谁能帮我 如何在 python 中传递数组 当你说 数组 时 我假设你
  • 如何在不更改设置的情况下不区分大小写排序

    我的索引名称是 data new 下面是插入索引的代码 test id 1 name A professor Bill Cage accounting id 2 name AB professor Gregg Payne engineeri