首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Elasticsearch自定义脚本字段检查param数组中是否存在id

答案

在Elasticsearch中,可以使用script字段自定义脚本以检查param数组中是否存在id。具体实现方法如下:

  1. 在索引定义中添加script字段:
代码语言:txt
复制

PUT /my_index

{

代码语言:txt
复制
 "mappings": {
代码语言:txt
复制
   "my_type": {
代码语言:txt
复制
     "properties": {
代码语言:txt
复制
       "my_field": {
代码语言:txt
复制
         "type": "text",
代码语言:txt
复制
         "fields": {
代码语言:txt
复制
           "keyword": {
代码语言:txt
复制
             "type": "keyword",
代码语言:txt
复制
             "ignore_above": 256
代码语言:txt
复制
           }
代码语言:txt
复制
         }
代码语言:txt
复制
       }
代码语言:txt
复制
     }
代码语言:txt
复制
   }
代码语言:txt
复制
 }

}

代码语言:txt
复制
  1. 在查询中指定script字段:
代码语言:txt
复制

GET /my_index/my_type/_search

{

代码语言:txt
复制
 "query": {
代码语言:txt
复制
   "bool": {
代码语言:txt
复制
     "should": [
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.exists(param.id)"
代码语言:txt
复制
         }
代码语言:txt
复制
       }
代码语言:txt
复制
     ]
代码语言:txt
复制
   }
代码语言:txt
复制
 }

}

代码语言:txt
复制

其中,params.id.exists(param.id)是一个脚本表达式,如果param数组中存在id,则返回true,否则返回false

  1. 如果需要检查param数组中是否存在多个id,可以使用terms查询:
代码语言:txt
复制

GET /my_index/my_type/_search

{

代码语言:txt
复制
 "query": {
代码语言:txt
复制
   "bool": {
代码语言:txt
复制
     "should": [
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.exists(terms: [param.id1, param.id2])"
代码语言:txt
复制
         }
代码语言:txt
复制
       }
代码语言:txt
复制
     ]
代码语言:txt
复制
   }
代码语言:txt
复制
 }

}

代码语言:txt
复制
  1. 如果需要检查param数组中是否存在多个类型的id,可以使用existsnot_exists查询:
代码语言:txt
复制

GET /my_index/my_type/_search

{

代码语言:txt
复制
 "query": {
代码语言:txt
复制
   "bool": {
代码语言:txt
复制
     "should": [
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.exists(param.id1, param.id2)"
代码语言:txt
复制
         }
代码语言:txt
复制
       },
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.not_exists(param.id1, param.id2)"
代码语言:txt
复制
         }
代码语言:txt
复制
       }
代码语言:txt
复制
     ]
代码语言:txt
复制
   }
代码语言:txt
复制
 }

}

代码语言:txt
复制
  1. 如果需要检查param数组中是否存在多个类型的id,可以使用terms查询:
代码语言:txt
复制

GET /my_index/my_type/_search

{

代码语言:txt
复制
 "query": {
代码语言:txt
复制
   "bool": {
代码语言:txt
复制
     "should": [
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.exists(terms: { param.id1, param.id2 })"
代码语言:txt
复制
         }
代码语言:txt
复制
       },
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.not_exists(terms: { param.id1, param.id2 })"
代码语言:txt
复制
         }
代码语言:txt
复制
       }
代码语言:txt
复制
     ]
代码语言:txt
复制
   }
代码语言:txt
复制
 }

}

代码语言:txt
复制
  1. 如果需要检查param数组中是否存在多个类型的id,可以使用terms查询,并通过size参数指定返回的最大结果数:
代码语言:txt
复制

GET /my_index/my_type/_search

{

代码语言:txt
复制
 "query": {
代码语言:txt
复制
   "bool": {
代码语言:txt
复制
     "should": [
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.exists(terms: { param.id1, param.id2 }, size: 10)"
代码语言:txt
复制
         }
代码语言:txt
复制
       },
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params.id.not_exists(terms: { param.id1, param.id2 }, size: 10)"
代码语言:txt
复制
         }
代码语言:txt
复制
       }
代码语言:txt
复制
     ]
代码语言:txt
复制
   }
代码语言:txt
复制
 }

}

代码语言:txt
复制
  1. 如果需要检查param数组中是否存在多个类型的id,可以使用terms查询,并通过size参数指定返回的最大结果数,使用allow_no_values参数指定是否允许查询结果为null
代码语言:txt
复制

GET /my_index/my_type/_search

{

代码语言:txt
复制
 "query": {
代码语言:txt
复制
   "bool": {
代码语言:txt
复制
     "should": [
代码语言:txt
复制
       {
代码语言:txt
复制
         "script": {
代码语言:txt
复制
           "source": "params
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券