你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
kennywu76 - Wood
赞同来自: DimonHo
# 创建分词字段foo PUT test { "mappings": { "test": { "properties": { "foo": { "type": "text" } } } } } # 索引一条文档 POST test/test?refresh { "foo": "shout out loud" } # 增加一个不分词字段foo_raw PUT test/test/_mapping { "test": { "properties": { "foo_raw": { "type": "keyword" } } } } # 搜索foo_raw字段无匹配 POST test/_search { "query": { "term": { "foo_raw": "shout out loud" } } } # 通过update-by-query,用painless脚本将所有文档的foo字段赋值给foo_raw字段 POST test/_update_by_query?refresh { "query": { "match_all": {} }, "script": { "inline": "ctx._source['foo_raw'] = ctx._source['foo']" } } #再次搜索foo_raw字段,有结果,证实赋值成功 POST test/_search { "query": { "term": { "foo_raw": "shout out loud" } } } { "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 0.2876821, "hits": [ { "_index": "test", "_type": "test", "_id": "AVtxM-mFv8wSnZufUqd0", "_score": 0.2876821, "_source": { "foo_raw": "shout out loud", "foo": "shout out loud" } } ] } }
Jea - 一只猿
赞同来自:
fhyes123 - ES小白
要回复问题请先登录或注册
4 个回复
kennywu76 - Wood
赞同来自: DimonHo
值得注意的是,执行update-by-script的时候,会对query match的文档做一个snapshot,只更新snapshot里的文档,因此这个过程如果有新数据写入,新数据不会被更新。
这种更新的方法的优点是无需重建已有的索引,但是因为使用了脚本做更新,在数据量很大的情况下,性能可能不会很好。
比较而言,重新索引的性能会好得多,es的reindex api使用起来也很方便。 如果可以接受更换索引名称的话,还是重建比较好。
Jea - 一只猿
赞同来自:
去重建索引吧
Jea - 一只猿
赞同来自:
fhyes123 - ES小白
赞同来自:
思路是:建立字段B不分词,用深度分页去遍历字段A,把数据写到字段B
但是一定要注意同步的问题,就是写入数据的时候字段AB要同时写入,检索的时候根据具体需求检索A或者B就行了