答案:
在Elasticsearch中,可以使用script
字段自定义脚本以检查param
数组中是否存在id
。具体实现方法如下:
script
字段:
PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
script
字段:
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{
"script": {
"source": "params.id.exists(param.id)"
}
}
]
}
}
}
其中,params.id.exists(param.id)
是一个脚本表达式,如果param
数组中存在id
,则返回true
,否则返回false
。
param
数组中是否存在多个id
,可以使用terms
查询:
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{
"script": {
"source": "params.id.exists(terms: [param.id1, param.id2])"
}
}
]
}
}
}
param
数组中是否存在多个类型的id
,可以使用exists
或not_exists
查询:
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{
"script": {
"source": "params.id.exists(param.id1, param.id2)"
}
},
{
"script": {
"source": "params.id.not_exists(param.id1, param.id2)"
}
}
]
}
}
}
param
数组中是否存在多个类型的id
,可以使用terms
查询:
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{
"script": {
"source": "params.id.exists(terms: { param.id1, param.id2 })"
}
},
{
"script": {
"source": "params.id.not_exists(terms: { param.id1, param.id2 })"
}
}
]
}
}
}
param
数组中是否存在多个类型的id
,可以使用terms
查询,并通过size
参数指定返回的最大结果数:
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{
"script": {
"source": "params.id.exists(terms: { param.id1, param.id2 }, size: 10)"
}
},
{
"script": {
"source": "params.id.not_exists(terms: { param.id1, param.id2 }, size: 10)"
}
}
]
}
}
}
param
数组中是否存在多个类型的id
,可以使用terms
查询,并通过size
参数指定返回的最大结果数,使用allow_no_values
参数指定是否允许查询结果为null
:
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{
"script": {
"source": "params
领取专属 10元无门槛券
手把手带您无忧上云