记录一:(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 中的字段是 or
null
[]
- 该字段已在映射中设置
"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"
}
}
}
}
}
'