python - "Order By" Elasticsearch

标签 python sorting elasticsearch sqlite

我正在将 sqlite3 中的数据库重新创建为 elasticsearch 中的数据库..

在 python 脚本中,我有一行按这样的状态对 sqlite3 数据库进行排序,

`rows = cur.execute("""SELECT * FROM {tn} ORDER BY (CASE state when 'CRITICAL' THEN 1 WHEN 'WARNING' then 2 WHEN 'UNKNOWN' THEN 3 ELSE 100 END) ASC;""".format(tn=table_name))`

我想知道是否有办法,如果有的话如何使用elasticsearch-python客户端复制这个“按情况排序”?

使用elasticsearch_dsl搜索对象,到目前为止我已经有了......

    ##Query for ID ##
    s = Search( using=client, index="logstash-*", )\
    .query("match", host="{h}".format(h=host_name))

    ## Sort by State ##
    s = s.sort("state", {"order" : "CRITICAL", "WARNING", "UNKNOWN"})

谢谢!!

最佳答案

由于您正在重新创建数据,我建议借此机会对其进行一些改造。这将是最简单的选择。例如,将状态作为整数而不是字符串存储在数据中。您可以有一个额外的字段 state_num ,其中包含整数值,然后将“CRITICAL”映射到 1,将“WARNING”映射到 2 等。按此字段排序将很容易:

"sort" : [
  { "state_num" : "asc" }
]

如果您不想重新建模数据,另一个选择是使用 script-based sorting 。例如:

"sort" : {
  "_script" : {
    "script" : "switch(doc['state'].value) { case 'CRITICAL': return 1; case 'WARNING': return 2; case 'UNKNOWN': return 3; default: return 100; }",
  "type" : "number",
  "order" : "asc"
  }
}

关于python - "Order By" Elasticsearch ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082355/

相关文章:

python - 有没有办法将参数传递给 Flask-ReSTLess GET_SINGLE 预处理器?

python - 获取 YouTube 上的视频评论

sorting - 使用点击在表格 View 中移动行 - Swift

python - 如何在 Python 中对字典列表进行多排序?

swift - 按日期快速排序我的 tableView

java - 如何在elasticsearch中添加where子句

python - 如何在 Pandas 数据框中构建按字母顺序排列的单词评分

python - 正则表达式 Python 问题

node.js - 为什么我无法使用 axios 向我的 Elastic Enterprise Search 应用程序发出搜索请求?

elasticsearch - 我如何检查从基巴那发送到elasticsearch的查询