标签:文档 遇到 mamicode ace ima 解决 index 方式 个人
线上实战问题 1脚本的使用
你好,我想问一下,在 ES 里我想把两个字段的值是一样的查出来。
但是其中一个字段是在一个字典里的,我该怎么写啊?
{
"query": {
"bool": {
"must": {
"script": {
"script": {
"source": "doc[‘user_id‘]= doc[‘music.sec_uid‘]",
"lang": "painless"
}
}
}
}
}
}
比如:我想要查询 user_id 和 sec_uid 一样的数据,但是 sec_uid 是在 music 字典里。
我怎么处理呢?
需求核心是:比较两个字段,把不同字段值相同的数据取出来。
这个时候,要想到传统的精准匹配搜索或者全文检索搜索都不能解决问题。
需要更高阶的搜索才可以,此时脑子里要快速过文档,当然也可以与查看文档相结合。
逐步定位文档的位置:
研读官方给出的 Demo,基本就能得到问题的答案。
这里会引申出一个非常重要的知识点,也是实战业务场景反馈最多的检索性能优化特别注意的点:
正如官方文档解读:
PUT test_002
{
"mappings": {
"properties": {
"user_id": {
"type": "keyword"
},
"music": {
"properties": {
"sec_uid": {
"type": "keyword"
}
}
}
}
}
}
GET test_002/_mapping
POST test_002/_bulk
{"index":{"_id":1}}
{"user_id":333,"music.sec_uid":444}
{"index":{"_id":2}}
{"user_id":333,"music.sec_uid":333}
{"index":{"_id":3}}
{"user_id":333,"music.sec_uid":555}
POST test_002/_search
{
"query": {
"bool": {
"filter": [
{
"script": {
"script": {
"source":"doc[‘user_id‘]==doc[‘music.sec_uid‘]",
"lang":"painless"
}
}
}
]
}
}
}
update_by_query, ingest 数据预处理 + painless 脚本的使用
update脚本,某个时间字段time,都是 2020-08-10 xx:xx:xx, 如何将该字段所有值替换为2020-10-24 xx:xx:xx, 只改日期,不改时分秒。
咋写呢?求大佬们指点啊
需求核心是:
注意:以下是示例DSL。
PUT my_index
{
"mappings": {
"properties": {
"date": {
"type": "keyword"
}
}
}
}
PUT my_index/_doc/2
{
"date": "2015-01-01T12:10:30Z"
}
PUT _ingest/pipeline/my_pipeline
{
"description": "use index:my-index",
"processors": [
{
"script": {
"lang": "painless",
"source": "ctx.data_new = ctx.date.replace(‘2015-01-01‘, ‘2020-01-01‘)"
}
}
]
}
POST my_index/_update_by_query?pipeline=my_pipeline
{
"query":{
"match_all":{}
}
}
GET my_index/_search
遇到问题不要慌,
拆解问题来帮忙。
拆解之后找文档,
结合文档和拆解的需求,
问题自然迎刃而解。
通过拆解问题,得到遇到类似问题的应对策略和方法论比什么都重要!
大家对问题又不同见解或者花式解法,欢迎留言交流。
更多推荐:
重磅 | 死磕 Elasticsearch 方法论认知清单(2020年国庆更新版)
能拿驾照就能通过 Elastic 认证考试!
更短时间更快习得更多干货!
中国 40%+ Elastic 认证工程师出自于此!
和全球 800+ Elastic 爱好者一起死磕 Elasticsearch!
标签:文档 遇到 mamicode ace ima 解决 index 方式 个人
原文地址:https://blog.51cto.com/15050720/2562576