copy_to
编辑copy_to
编辑
copy_to
参数允许您将多个字段的值复制到一个组字段中,然后可以将该组字段作为一个字段进行查询。
如果您经常搜索多个字段,则可以使用 copy_to
搜索更少的字段来提高搜索速度。请参阅尽可能少地搜索字段。
例如,可以将 first_name
和 last_name
字段复制到 full_name
字段,如下所示
response = client.indices.create( index: 'my-index-000001', body: { mappings: { properties: { first_name: { type: 'text', copy_to: 'full_name' }, last_name: { type: 'text', copy_to: 'full_name' }, full_name: { type: 'text' } } } } ) puts response response = client.index( index: 'my-index-000001', id: 1, body: { first_name: 'John', last_name: 'Smith' } ) puts response response = client.search( index: 'my-index-000001', body: { query: { match: { full_name: { query: 'John Smith', operator: 'and' } } } } ) puts response
PUT my-index-000001 { "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-000001/_doc/1 { "first_name": "John", "last_name": "Smith" } GET my-index-000001/_search { "query": { "match": { "full_name": { "query": "John Smith", "operator": "and" } } } }
|
|
仍然可以分别查询 |
一些要点
- 复制的是字段*值*,而不是词条(词条是分析过程的结果)。
- 原始的
_source
字段不会被修改以显示复制的值。 - 可以使用
"copy_to": [ "field_1", "field_2" ]
将相同的值复制到多个字段。 - 您不能通过中间字段递归复制,例如,在
field_1
上使用copy_to
复制到field_2
,并在field_2
上使用copy_to
复制到field_3
,期望索引到field_1
最终会出现在field_3
中,而是直接从原始字段复制到多个字段。 - 如果目标字段在索引映射中不存在,则应用通常的 动态映射 行为。默认情况下,如果将
dynamic
设置为true
,则会将不存在的目标字段动态添加到索引映射中。如果将dynamic
设置为false
,则不会将目标字段添加到索引映射中,并且不会复制该值。如果将dynamic
设置为strict
,则复制到不存在的字段将导致错误。
对于值采用对象形式的字段类型,例如 date_range
,*不支持* copy_to
。