最近写了一个Elastic Search查询DSL的生成代码。代码如下
使用方式类似于dapper,要配套一个Json模板来使用,基本就是elastic search的查询语法,知识将需要注入的参数改为用@开头的占位字符串。
{
"query": {
"bool": {
"must": [
{ "term": { "Status": "@status" } },
{ "term": { "Name": "@name" } }
]
}
}
}
填充参数,会自动生成对应的json文件(ES的查询body)。
QueryBuilder.Build(template, new {status = "ok", name="jim"});
执行效果如下:
{
"query": {
"bool": {
"must": [
{ "term": { "Status": "ok" } },
{ "term": { "Name": "jim" } }
]
}
}
}
支持各种json类型,可以直接配置es查询模板。并且,当属性没有传入时,会自动将其从查询条件中去掉,非常方便,例如:
QueryBuilder.Build(template, new {status = "ok"});
生成结果如下:
{
"query": {
"bool": {
"must": [
{ "term": { "Status": "ok" } }
]
}
}
}
这个方式比较适合于:查询条件随着输入参数动态增删,并且查询条件经常需要修改的场景: 当查询条件变化时,只需要修改模板即可,不需要修改代码,并且可读性非常好。也能根据参数自适应查询条件的增删。
原文:https://www.cnblogs.com/TianFang/p/13752464.html