1 update api:
people/person/2/_update
{ "doc": { "Lastname": "海峡2" }}
2 script:
这时候当API不能满足要求时,Elasticsearch允许你使用脚本实现自己的逻辑。脚本支持非常多的API,例如搜索、排序、聚合和文档更新。脚本可以通过请求的一部分、检索特殊的.scripts
索引或者从磁盘加载方式执行。
需要开启脚本支持,es配置文件中要加入:
script.inline: onscript.indexed: on script.file: on
根据ID修改:people/person/2/_update
1)脚本能够使用update
API改变_source
字段的内容,它在脚本内部以ctx._source
表示
{ "script": "ctx._source.Lastname='川普'" }
2)当我们试图更新一个不存在的文档,更新将失败,在这种情况下,我们可以使用upsert
参数定义文档来使其不存在时被创建
{ "script" : "ctx._source.Lastname='川普'", "upsert": { "views": 1 } }
删除:{ "script": " ctx.op= ctx._source.Lastname='川普' ?'delete':'none'"}
根据条件修改:people/person/_update_by_query
讲firstname中包含川字的文档的:lastname改为希拉里,Firstname修改为四川普通话
{ "query": { "term": { "Firstname": "川" } }, "script": { "inline": "ctx._source.Lastname='希拉里';ctx._source.Firstname='四川普通话'" }}
nest:
//UpdateByQueryDescriptor Func, IUpdateByQueryRequest> fun = u => u.Query(q => q.Term("Firstname", "川")).Script(s => s.Inline("ctx._source.Lastname='希拉里1';ctx._source.Firstname='四川普通话1'"));client.UpdateByQuery ("people", "person", fun);
继续参考:
继续参考:////// 根据查询条件进行更新 /// ////// /// /// /// public static IUpdateByQueryResponse UpdateByQuery (string indexName, string typeName, string script, Func , QueryContainer> querySelector) where T : class { IUpdateByQueryResponse updateResponses = null; if (!string.IsNullOrEmpty(script)) { try { updateResponses = ESHelper.GetInstance() .GetElasticClient() .UpdateByQuery (indexName, typeName, u => u.Query(querySelector) .Script(s => s.Inline(script) .Lang("groovy")) .Refresh() .Conflicts(Elasticsearch.Net.Conflicts.Proceed) .WaitForCompletion(false)); } catch (Exception ex) { LogInfoWriter.GetInstance("error").Error("方法:UpdateByQuery 批处理异常:" + ex.ToString()); } } return updateResponses; } /// /// 根据查询条件进行删除 /// /// /// /// ///[CoreCat] public static IDeleteByQueryResponse DeleteByQuery(string indexName, string typeName, QueryContainer qc) { IDeleteByQueryResponse response = null; try { IDeleteByQueryRequest deleteQuery = new DeleteByQueryRequest(indexName, typeName) { Query = qc }; response = ESHelper.GetInstance().GetElasticClient().DeleteByQuery(deleteQuery); } catch (Exception ex) { LogInfoWriter.GetInstance("error").Error("方法:DeleteByQuery 批处理异常:" + ex.ToString()); } return response; }
3 DeleteByQuery命令
需要安装插件 DeleteByQuery 并重启es:sudo bin/plugin install delete-by-query根据条件删除文档:DELETE: productindex/product/_querybody:{ "query": { "match": { "sysNo": "3269 3271" } }}删除某个类型下的所有文档DELETE: productindex/product/_querybody:{ "query": { "match_all": { } }}NETS命令:IDeleteByQueryRequest deleteQuery = new DeleteByQueryRequest(indexName, typeName) { Query = qc };IDeleteByQueryResponse response = ESHelper.GetInstance().GetElasticClient().DeleteByQuery(deleteQuery);
bool query
语法:
{ "size": 20, "query": { "bool": { "must": [ { "term": { "customerSysNo": 7308257 } }, { "term": { "isShow": true } } ], "must_not": { "term": { "sOID": 1003219103 } } } }}
nest语法:
Listmustnotqcs = new List ();List mustqcs = new List ();//mustnotqcsmustnotqcs.Add(new TermQuery { Field = "sOID", Value =1003219103 });//mustqcsmustqcs.Add(new TermQuery { Field = "customerSysNo", Value = 7308257 }); mustqcs.Add(new TermQuery { Field = "isShow", Value = "true" });BoolQuery qcbool = new BoolQuery() { Must = mustqcs, MustNot = mustnotqcs };