我正在sqlite3中将一个数据库重新创建为elasticsearch中的一个..
在python脚本中,我有一行按照这样的状态对sqlite3数据库进行排序,
C5E501374D0343090957F7E5929E765C931F7D3EC7A96189FDA88549D54D9E4E5DB3FC1C2
我想知道是否有办法,如果有的话,如何复制这个" ORDER BY CASE"使用elasticsearch-python客户端?
使用elasticsearch_dsl搜索对象,我到目前为止......
`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))`
谢谢!
答案 0 :(得分:1)
由于您正在重新创建数据,我建议您借此机会对其进行一些重新设计。这将是最简单的选择。例如,将状态存储为数据中的整数,而不是字符串。你可以有一个包含整数值的额外字段boolean loaded = false;
SoundPool sp = new SoundPool(70, AudioManager.STREAM_MUSIC, 0);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
Log.i("OnLoadCompleteListener", "Sound " + sampleId + " loaded.");
loaded=true;
}
});
final int sol [] = new int[3];
sol[0] = sp.load(this, R.raw.x1, 1);
sol[1] = sp.load(this, R.raw.x2, 1);
sol[2] = sp.load(this,R.raw.x3, 1);
if (loaded) {
autosynce(sol);
}
,然后将'CRITICAL'映射到1,'警告'映射到2,等等。按此字段排序很容易:
state_num
如果您不想重新构建数据,另一种选择是使用script-based sorting。例如:
"sort" : [
{ "state_num" : "asc" }
]