Elasticsearch 使用copy_to组合字段进行查询

copy_to 介绍

copy_to 参数允许将多个字段的值复制到另一个字段中,然后对该字段进行查询。例如,first_name和last_name字段可以复制到full_name字段,如下所示:

PUT /my_index

{ “mappings”: { “properties”: { “first_name”:{ “type”: “text”, “copy_to”: “full_name” }, “last_name”:{ “type”: “text”, “copy_to”: “full_name” }, “full_name”:{ “type”: “text” } } } }

 

PUT my_index/_doc/1

{ “first_name”: “John”, “last_name”: “Smith” }

 

 

GET /my_index/_search

{ “query”: { “match”: { “full_name”:{ “query”: “John Smith”, “operator”: “and” } } } }

 

 

 

  • first_name 和 last_name 的值被复制到 full_name 字段
  • first_name 和 last_name 仍然可以被作为查询条件进行查询

其他注意点

  • copy_to 复制的是字段值,而不是分词产生的词语
  • _source 字段集合不会显示复制后的字段值
  • copy_to 可以复制到多个字段,例如:“copy_to”: [ “field_1”, “field_2” ]
  • 不能使用中间字段进行复制,例如:field_1 复制到 field_2,field_2复制到field_3,这样是无效的。应该直接使用多字段复制,让field_1复制到 [ “field_2”, “field_3” ]