Elasticsearch 一些异常报错、注意事项(3)

记录一:(Java High Level REST Client)更新接口UpdateRequest

使用脚本进行更新(实际写法需要根据当前引用的依赖版本决定)

UpdateRequest request = new UpdateRequest("posts", "1"); 
Map<String, Object> parameters = singletonMap("count", 4); 
Script inline = new Script(ScriptType.INLINE, "painless",
        "ctx._source.field += params.count", parameters);  
request.script(inline);

记录二:script脚本查询更新接口

POST /test_index/_update_by_query?
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "name"
                }
            }
        }
    },
    "script": {
        "source": "ctx._source.isPerson = params.isPerson; ",
        "params": {
          "isPerson": 1
        }
    }
}

记录三:QueryBuilder同时使用must和should进行or条件查询不成功

一开始的写法:

QueryBuilder query = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery("isName", 1))
                .must(QueryBuilders.termQuery("isIp", 0))
                .should(QueryBuilders.rangeQuery("createTime").lte(new Date().getTime()));

执行发现should()方法的条件未生效,只查询出了满足.must()方法的数据

查了下:

should在和must同时使用的时候es内部属性 minumum_should_match 默认是 0
单独使用should时 minumum_should_match 默认是 1

可以将should()方法放入must()方法中

BoolQueryBuilder shouldQuery= QueryBuilders.boolQuery();
shouldQuery.should(QueryBuilders.rangeQuery("createTime").lte(new Date().getTime()));

QueryBuilder query = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery("isName",1))
                .must(QueryBuilders.termQuery("isIp", 0))
                .must(shouldQuery);

也可以设置

query.minimumShouldMatch(1);

记录四:查询字段为空/非空/存在的条件

Exists query (Exists query | Elasticsearch Guide [7.9] | Elastic) :

返回包含字段索引值的文档。

由于各种原因,文档字段的索引值可能不存在:

  • 源 JSON 中的字段是 ornull[]
  • 该字段已在映射中设置"index" : false
  • 字段值的长度超出了映射中的设置ignore_above
  • 字段值格式不正确,是在映射中定义的ignore_malformed

// 查询user字段不为空的记录
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "exists": {
      "field": "user"
    }
  }
}
'


// 查询user字段为空的记录
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "user.id"
        }
      }
    }
  }
}
'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值