官术网_书友最值得收藏!

  • ElasticSearch Cookbook
  • Alberto Paro
  • 301字
  • 2021-04-02 10:10:00

Mapping arrays

Arrays or multi-value fields are very common in data models, but not natively supported in traditional SQL solutions.

In SQL, multi-value fields require the creation of accessory tables that must be joined to gather all the values, resulting in poor performance when the cardinality of records is huge.

Getting ready

You need a working ElasticSearch cluster.

How to do it...

Every field is automatically managed as an array. For example, to store tags for a document, the mapping will be as shown in the following code snippet:

{
  "document" : {
    "properties" : {
      "name" : {"type" : "string",  "index":"analyzed"},
      "tag" : {"type" : "string", "store" : "yes" , "index":"not_analyzed"},
    
    }
  }
}

This mapping is valid for indexing the following documents:

{"name": "document1", "tag": "awesome"}

and

{"name": "document2", "tag": ["cool", "awesome", "amazing"] }

How it works...

ElasticSearch transparently manages the array; there is no difference if you declare a single value or a multi-value due to its Lucene core nature.

Multiple values for fields are managed in Lucene, adding them to a document with the same field name (index_name in ElasticSearch). If the index_name field is not defined in the mapping, it is taken from the name of the fields. It can also be set to other values for custom behaviors, such as renaming a field at indexing level or merging two or more JSON fields in a single Lucene field. Redefining the index_name field must be done with caution as it also affects the search.

For people coming from SQL, this behavior may seem quite strange, but this is a key point in the NoSQL world as it reduces the need for joint query and creating different tables to manage multiple values.

Tip

An array of embedded objects has the same behavior as that of simple fields.

主站蜘蛛池模板: 喀喇| 六盘水市| 洛阳市| 乳源| 沁阳市| 贵德县| 尚志市| 红河县| 芷江| 文安县| 郯城县| 林甸县| 赫章县| 高平市| 和林格尔县| 滕州市| 昆明市| 永靖县| 崇文区| 枣庄市| 宁都县| 方城县| 镇赉县| 赤峰市| 平谷区| 凤山市| 民县| 永州市| 塔河县| 乌拉特中旗| 城市| 曲麻莱县| 高雄市| 九龙县| 衡南县| 崇明县| 甘泉县| 肇庆市| 淄博市| 沧源| 英德市|