Elasticsearch:_search 脚本中的计数查询
Elasticsearch: count query in _search script
我正在尝试进行单个查询以更新 ES 索引中的一个字段值。
我有一个索引 pages
,其中包含有关页面的信息(id
、name
、time
、parent_page_id
、child_count
等等)
我可以将字段 parent_page_id
更新为包含此页面 id
的文档数 parent_page_id
我可以使用默认的单个值更新字段,例如:
PUT HOST_ADDRESS/pages/_update_by_query
{
"script": {
"source": "def child_count = 0; ctx._source.child_count = child_count;",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
我正在尝试使用此代码获取 child 计数,但它不起作用。
"source": "def child_count = 0; client.prepareSearch('pages').setQuery(QueryBuilders.termQuery("parent_page_id", "ctx._source.id")).get().getTotal().getDocs().getCount(); ctx._source.child_count = child_count;",
"lang": "painless"
我的问题是,如何在 script
中创建子 count-query 以在变量 child_count
中有一个真正的 child 计数
脚本不是这样工作的——你不能在那里使用 java DSL。 Painless contexts.
中没有 client
或 QueryBuilders
等概念
因此,在您继续使用脚本更新文档之前,您需要获得计数。
提示:当您 store them:
时,脚本可以重复使用
POST HOST_ADDRESS/_scripts/update_child_count
{
"script": {
"lang": "painless",
"source": "ctx._source.child_count = params.child_count"
}
}
然后通过id
申请:
PUT HOST_ADDRESS/pages/_update_by_query
{
"script": {
"id": "update_child_count", <-- no need to write the Painless code again
"params": {
"child_count": 987
}
},
"query": {
"term": {
"parent_page_id": 123
}
}
}
我正在尝试进行单个查询以更新 ES 索引中的一个字段值。
我有一个索引 pages
,其中包含有关页面的信息(id
、name
、time
、parent_page_id
、child_count
等等)
我可以将字段 parent_page_id
更新为包含此页面 id
的文档数 parent_page_id
我可以使用默认的单个值更新字段,例如:
PUT HOST_ADDRESS/pages/_update_by_query
{
"script": {
"source": "def child_count = 0; ctx._source.child_count = child_count;",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
我正在尝试使用此代码获取 child 计数,但它不起作用。
"source": "def child_count = 0; client.prepareSearch('pages').setQuery(QueryBuilders.termQuery("parent_page_id", "ctx._source.id")).get().getTotal().getDocs().getCount(); ctx._source.child_count = child_count;",
"lang": "painless"
我的问题是,如何在 script
中创建子 count-query 以在变量 child_count
脚本不是这样工作的——你不能在那里使用 java DSL。 Painless contexts.
中没有client
或 QueryBuilders
等概念
因此,在您继续使用脚本更新文档之前,您需要获得计数。
提示:当您 store them:
时,脚本可以重复使用POST HOST_ADDRESS/_scripts/update_child_count
{
"script": {
"lang": "painless",
"source": "ctx._source.child_count = params.child_count"
}
}
然后通过id
申请:
PUT HOST_ADDRESS/pages/_update_by_query
{
"script": {
"id": "update_child_count", <-- no need to write the Painless code again
"params": {
"child_count": 987
}
},
"query": {
"term": {
"parent_page_id": 123
}
}
}