自定义_all字段

元数据:_all字段中,我们解释了特殊的_all字段会将其它所有字段中的值作为一个大字符串进行索引。尽管将所有字段的值作为一个字段进行索引并不是非常灵活。如果有一个自定义的_all字段用来索引人名,另外一个自定义的_all字段用来索引地址就更好了。

ES通过字段映射中的copy_to参数向我们提供了这一功能:

  1. PUT /my_index
  2. {
  3. "mappings": {
  4. "person": {
  5. "properties": {
  6. "first_name": {
  7. "type": "string",
  8. "copy_to": "full_name" <1>
  9. },
  10. "last_name": {
  11. "type": "string",
  12. "copy_to": "full_name" <1>
  13. },
  14. "full_name": {
  15. "type": "string"
  16. }
  17. }
  18. }
  19. }
  20. }

// SENSE: 110_Multi_Field_Search/45_Custom_all.json

<1> first_name和last_name字段中的值会被拷贝到full_name字段中。

有了这个映射,我们可以通过first_name字段查询名字,last_name字段查询姓氏,或者full_name字段查询姓氏和名字。

提示:first_name和last_name字段的映射和full_name字段的索引方式的无关。full_name字段会从其它两个字段中拷贝字符串的值,然后仅根据full_name字段自身的映射进行索引。