{"id":2259,"date":"2016-01-16T21:00:59","date_gmt":"2016-01-16T20:00:59","guid":{"rendered":"http:\/\/codingexplained.com\/?p=2259"},"modified":"2017-06-11T18:53:52","modified_gmt":"2017-06-11T16:53:52","slug":"field-data-types","status":"publish","type":"post","link":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types","title":{"rendered":"Field Data Types"},"content":{"rendered":"<p>Having introduced mapping, we will now go into a bit of more detail about data types.\u00a0There are four categories of data types in Elasticsearch, namely core data types, complex data types, geo data types and specialized data types, which we<br \/>\nwill all take a look at now. Feel free to skip this article and move onto the next one if you are already familiar with the various data types.<\/p>\n<h2>Core Data Types<\/h2>\n<p>The first category that I will talk about is core data types, beginning with strings.<\/p>\n<h3>Strings<\/h3>\n<p>Not surprisingly string fields accept string values. This data type can be sub-divided into full text and keywords, which I will discuss now.<\/p>\n<h3>Strings &#8211; Full Text<\/h3>\n<p>Full text fields are typically used for text based relevance searches such as when searching for products by name. These fields are analyzed, which means that data is passed through an analyzer to convert strings into a list of individual terms. This happens before the data gets indexed and is what enables Elasticsearch to search for individual words within a full text field. Full text fields are not used for sorting and are rarely used for aggregations.<\/p>\n<h3>Strings &#8211; Keywords<\/h3>\n<p>The keywords type is used for storing exact values such as tags, statuses and such. The exact string value is added to the index as a single term, because keyword fields are not analyzed. Fields of this type are typically used for filtering, such as finding all products that are on sale. They are also used for sorting and aggregations quite often.<\/p>\n<h3>Numeric<\/h3>\n<p>The next core data type is the numeric data type. As you can probably tell, this data type is used for storing numeric values such as integers, floats and doubles, e.g. <span class=\"code\">1<\/span> and <span class=\"code\">1.5<\/span>. The numeric data type supports the following numeric types.<\/p>\n<ul>\n<li>long (signed 64-bit integer)<\/li>\n<li>integer (signed 32-bit integer)<\/li>\n<li>short (signed 16-bit integer)<\/li>\n<li>byte (signed 8-bit integer)<\/li>\n<li>double (double-precision 64-bit floating point)<\/li>\n<li>float (single-precision 32-bit floating point)<\/li>\n<\/ul>\n<h3>Dates<\/h3>\n<p>There is also a &#8220;date&#8221; data type in Elasticsearch. Dates can be either a string containing formatted dates (e.g. <span class=\"code\">2016-01-01<\/span> or <span class=\"code\">2016\/01\/01 12:00:00<\/span>), an integer representing the seconds since the epoch or a long number representing the milliseconds since the epoch. The latter is how Elasticsearch stores dates internally.<\/p>\n<h3>Dates &#8211; Formats<\/h3>\n<p>When dealing with dates, it\u00a0is\u00a0possible to choose their formats. The default format is defined as a date with an optional time or the number of milliseconds since the epoch. This is defined as follows:\u00a0<span class=\"code\">strict_date_optional_time||epoch_millis<\/span>. Below are a few examples of some of the default formats that you can use when adding dates.<\/p>\n<ul>\n<li><span class=\"code\">2016-01-01<\/span> (date only)<\/li>\n<li><span class=\"code\">2016-01-01T12:00:00Z<\/span> (date including time)<\/li>\n<li><span class=\"code\">1410020500000<\/span> (milliseconds since the epoch)<\/li>\n<\/ul>\n<p>Note that the default date parser supports formats defined by the <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_8601\" title=\"ISO 8601\" target=\"_blank\" rel=\"external nofollow\">ISO standard<\/a>, so these examples are not the only formats that you can use. However, I would recommend using these as a convention within your project. If you define your own date format, then you can use various constant values that Elasticsearch provides, which act as placeholders when defining the format. You can find a full list of these <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/2.1\/mapping-date-format.html\" target=\"_blank\" rel=\"external nofollow\">in the documentation<\/a>. Note that you can use the boolean <span class=\"code\">OR<\/span> as in a programming language, by separating two placeholders with two pipes (<span class=\"code\">||<\/span>).<\/p>\n<h3>Boolean<\/h3>\n<p>If a field can only contain <span class=\"code\">on<\/span> or <span class=\"code\">off<\/span> values, then the boolean data type is appropriate. Just like in JSON, boolean fields can accept <span class=\"code\">true<\/span> and\u00a0<span class=\"code\">false<\/span> values. They also accept strings and numbers, which will be interpreted as a boolean. I would personally not recommend this, unless you need to\u00a0do this for some reason. False values include the boolean <span class=\"code\">false<\/span>, a string with a value of <span class=\"code\">&#8220;false&#8221;<\/span>, <span class=\"code\">&#8220;off&#8221;<\/span>, <span class=\"code\">&#8220;no&#8221;<\/span>, <span class=\"code\">&#8220;0&#8221;<\/span> or an empty string (<span class=\"code\">&#8220;&#8221;<\/span>), or the number <span class=\"code\">0<\/span>.\u00a0Everything that is not interpreted as <span class=\"code\">false<\/span>, will be interpreted as <span class=\"code\">true<\/span>.<\/p>\n<h3>Binary<\/h3>\n<p>It&#8217;s also possible to store binary data within a field, such as a file. This data will be stored as a Base64 encoded string and will not be searchable. An example is the string\u00a0<span class=\"code\">aHR0cDovL2NvZGluZ2V4cGxhaW5lZC5jb20=<\/span>.<\/p>\n<h2>Complex Data Types<\/h2>\n<p>Next, we will discuss complex data types.<\/p>\n<h3>Object<\/h3>\n<p>JSON documents are hierarchical, meaning that an object may container inner objects. In Elasticsearch, these are flattened before being indexed and are\u00a0stored as simple key\/value pairs. Consider the following\u00a0example.<\/p>\n<pre><code class=\"json\">{\r\n\t\"message\": \"Some text...\",\r\n\t\"customer.age\": 26,\r\n\t\"customer.address.city\": \"Copenhagen\",\r\n\t\"customer.address.country\": \"Denmark\"\r\n}<\/code><\/pre>\n<p>If <span class=\"code\">customer<\/span> is an object that has an <span class=\"code\">age<\/span> property, then this property will be\u00a0stored within a field named <span class=\"code\">customer.age<\/span>. The same applies for nested objects as you can see with the <span class=\"code\">address<\/span> object.<\/p>\n<h3>Array<\/h3>\n<p>Often times, you might want to store an array of values. You might be surprised to hear that Elasticsearch does not have an array type. This is because\u00a0any field can contain zero or more values by default, without having to explicitly define this. This means that by simply passing an array of values to\u00a0a field, Elasticsearch will automatically store these values, even for a field that has been mapped as a string, for example. Do, however, note that all\u00a0of the values within an array must be of the same data type. If no explicit mapping defines the data type, then Elasticsearch will infer it based on the\u00a0first value in the array.<\/p>\n<p>Below, you can see a few examples of adding arrays to an Elasticsearch field.<\/p>\n<ul>\n<li>Array of strings: <span class=\"code\">[&#8220;Elasticsearch&#8221;, &#8220;rocks&#8221;]<\/span><\/li>\n<li>Array of integers: <span class=\"code\">[1, 2]<\/span><\/li>\n<li>Array of arrays: <span class=\"code\">[1, [2, 3]]<\/span> &#8211; equivalent of <span class=\"code\">[1, 2, 3]<\/span><\/li>\n<li>Array of objects: <span class=\"code\">[{ &#8220;name&#8221;: &#8220;Andy&#8221;, &#8220;age&#8221;: 26 }, { &#8220;name&#8221;: &#8220;Brenda&#8221;, &#8220;age&#8221;: 32 }]<\/span><\/li>\n<\/ul>\n<p>Most noticeable is the\u00a0array of arrays that is flattened into a single array of values. Besides the simple data types, it is also possible to add complex data types to an array,\u00a0such as objects.<\/p>\n<h3>Arrays &#8211; Objects<\/h3>\n<p>Above,\u00a0I showed you an example of an array of objects. However, this does not work as you might expect. As I told you a minute ago,\u00a0Elasticsearch flattens object hierarchies into key\/value pairs because Lucene has no concept of inner objects like JSON does. This means that you cannot\u00a0query each object independently of the other objects in the array.\u00a0Please consider the below example.<\/p>\n<pre><code class=\"json\">{ \"users : [{ \"name\": \"Andy\", \"age\": 26 }, { \"name\": \"Brenda\", \"age\": 32 }] }<\/code><\/pre>\n<p>This array of objects is stored similar to this:<\/p>\n<pre><code class=\"json\">{ \"users.name\": [\"Andy\", \"Brenda\"], \"users.age\": [32, 26] }<\/code><\/pre>\n<p>An array contains two user\u00a0objects with the <span class=\"code\">name<\/span> and <span class=\"code\">age<\/span> properties. When this array is stored in Lucene, all of the values for a given property in the objects are added as an\u00a0array into a single field &#8211; in this case fields named <span class=\"code\">users.name<\/span> and <span class=\"code\">users.age<\/span>. In doing so, the associations between the properties are lost. In\u00a0this particular example, the association between the name <span class=\"code\">Andy<\/span> and the age <span class=\"code\">26<\/span> is lost, because the values are not sorted. The consequence is that a\u00a0search for a user named <span class=\"code\">Andy<\/span> who is <span class=\"code\">26<\/span> years old, would return incorrect results. The good news is that there is a solution to this problem, in case\u00a0you need to be able to perform such a search.<\/p>\n<h3>Nested<\/h3>\n<p>The solution to the problem mentioned above is the <span class=\"code\">nested<\/span> data type. This data type should be used when you need to index arrays of objects and\u00a0maintain the independence of each object. This means that the values for all of the objects will not be mixed together as you saw above.\u00a0Internally, each object in the array is indexed as a separate hidden document. The result of using this data type is that you can query for specific\u00a0objects based on their field values by using a special query named <span class=\"code\">nested<\/span>. What happens internally in Elasticsearch, is that the nested objects are\u00a0queried as if they were indexed as separate documents. This\u00a0is in fact the case technically, but you do not actually need to be aware of this.<\/p>\n<h2>Geo Data Types<\/h2>\n<p>Next, we will briefly walk through some of the\u00a0geo data types, which are unsurprisingly used for storing geographical data.<\/p>\n<h3>Geo-point<\/h3>\n<p>The <span class=\"code\">geo-point<\/span> data type is used for storing latitude-longitude pairs and can be used for searching for documents within a radius of some coordinates,\u00a0sorting by distance from some coordinates, etc. Values for a geo-point field can be added in four different formats.\u00a0The first one is as an object with\u00a0the <span class=\"code\">lat<\/span> and <span class=\"code\">lon<\/span> properties.<\/p>\n<pre><code class=\"json\">{\r\n\t\"location\": { \r\n\t\t\"lat\": 33.5206608,\r\n\t\t\"lon\": -86.8024900\r\n\t}\r\n}<\/code><\/pre>\n<p>The second is as a string with the latitude and longitude separated by a comma, and in that order.<\/p>\n<pre><code class=\"json\">{\r\n\t\"location\": \"33.5206608,-86.8024900\" \r\n}<\/code><\/pre>\n<p>The third option is a\u00a0geohash, which I am not going to explain further.<\/p>\n<pre><code class=\"json\">{\r\n\t\"location\": \"drm3btev3e86\" \r\n}<\/code><\/pre>\n<p>And the fourth way is as an array.<\/p>\n<pre><code class=\"json\">{\r\n\t\"location\": [-86.8024900,33.5206608] \r\n}<\/code><\/pre>\n<p>Notice that compared to the other formats, the latitude and longitude\u00a0have been switched around. The reason for this is to conform with <a href=\"http:\/\/geojson.org\/\" target=\"_blank\" rel=\"external nofollow\">GeoJSON<\/a>.<\/p>\n<h3>Geo-shape<\/h3>\n<p>A geo shape field can contain shapes such as rectangles and polygons, and can therefore be used to construct complex shapes. Therefore, this data type\u00a0should be used when a geo point is not sufficient.<br \/>\nA geo shape can be constructed in many ways, some of which include adding it as a linestring or as a\u00a0polygon. A linestring is an array of two or more position, which is essentially an array of arrays. If the array only contains two positions, then the\u00a0result is a straight line. A polygon is also added as an array of arrays, where each array contains points. It is important to note that the first and\u00a0last points in the outer array must be the same, which closes the polygon.<\/p>\n<h2>Specialized Data Types<\/h2>\n<p>Next, we will briefly discuss\u00a0some specialized data types whose use cases are quite narrow.<\/p>\n<h3>IPv4<\/h3>\n<p>The first one is the IPv4 data type. Unsurprisingly, it is used to map IPv4 addresses. Elasticsearch stores the values for an IPv4 field as <span class=\"code\">long<\/span> values\u00a0internally.<\/p>\n<h3>Completion<\/h3>\n<p>There is also a data type that is used for auto-complete functionality, named <span class=\"code\">completion<\/span>. It is a so-called prefix suggester and although it does not do\u00a0spell correction, it is useful for providing the user with suggestions while searching, such as on Google. The way is does this, is by storing a finite\u00a0state transducer as part of the index, which allows for very fast loads and executions. However, as long as you know when to use this type, then this is\u00a0not important.<\/p>\n<h3>Token\u00a0Count<\/h3>\n<p>The <span class=\"code\">token_count<\/span> data type is an integer field which accepts string values. This may sound strange, but what happens is that the string values are\u00a0analyzed, and the number of tokens in the strings are indexed. An example use case would be that a <span class=\"code\">name<\/span> property has a <span class=\"code\">length<\/span> field of the\u00a0<span class=\"code\">token_count<\/span> type. A search query could then be executed to find persons whose name contains a given number of tokens, split by space for instance.<\/p>\n<h3>Attachment<\/h3>\n<p>There is also an <span class=\"code\">attachment<\/span> data type, which lets Elasticsearch index attachments for many common formats such as PDF files, spreadsheets, PowerPoint\u00a0presentations and more. The attachments are stored as a Base64 encoded string. This functionality is available as a plugin that must be installed on all\u00a0nodes. Doing so is easy and can be done by typing in the below command, assuming that the node is running in a UNIX environment.<\/p>\n<pre><code>sudo \/path\/to\/elasticsearchbin\/plugin install mapper-attachments<\/code><\/pre>\n<p>If you do\u00a0install this plugin, then note that you must restart each node after the installation has completed.<\/p>\n<p>That&#8217;s it! That was a walkthrough of the most important data types in Elasticsearch that you are most likely to need or encounter.<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"series\">Part 9 of 35 in the <a href=\"https:\/\/codingexplained.com\/tutorial\/complete-guide-to-elasticsearch\" class=\"series-163\" title=\"Complete Guide to Elasticsearch\">Complete Guide to Elasticsearch<\/a> series<\/div><p>Having introduced mapping, we will now go into a bit of more detail about data types.\u00a0There are four categories of data types in Elasticsearch, namely core data types, complex data types, geo data types and specialized data types, which we will all take a look at now. Feel free to skip this article and move&hellip; <a href=\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types\" class=\"more-link\">read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"Field Data Types","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[154],"tags":[155],"series":[163],"jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Field Data Types<\/title>\n<meta name=\"description\" content=\"There are many field data types in Elasticsearch. This article walks through the most important data types in Elasticsearch.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Field Data Types\" \/>\n<meta property=\"og:description\" content=\"There are many field data types in Elasticsearch. This article walks through the most important data types in Elasticsearch.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types\" \/>\n<meta property=\"og:site_name\" content=\"Coding Explained\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/codingexplained\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/codingexplained\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-16T20:00:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-06-11T16:53:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/codingexplained.com\/wp-content\/uploads\/2015\/11\/codingexplained-fb-promote.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"444\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bo Andersen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@codingexplained\" \/>\n<meta name=\"twitter:site\" content=\"@codingexplained\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bo Andersen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types\",\"url\":\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types\",\"name\":\"Field Data Types\",\"isPartOf\":{\"@id\":\"https:\/\/codingexplained.com\/#website\"},\"datePublished\":\"2016-01-16T20:00:59+00:00\",\"dateModified\":\"2017-06-11T16:53:52+00:00\",\"author\":{\"@id\":\"https:\/\/codingexplained.com\/#\/schema\/person\/e19c92ec991f571605f047cefeaa950d\"},\"description\":\"There are many field data types in Elasticsearch. This article walks through the most important data types in Elasticsearch.\",\"breadcrumb\":{\"@id\":\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/codingexplained.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Field Data Types\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/codingexplained.com\/#website\",\"url\":\"https:\/\/codingexplained.com\/\",\"name\":\"Coding Explained\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/codingexplained.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/codingexplained.com\/#\/schema\/person\/e19c92ec991f571605f047cefeaa950d\",\"name\":\"Bo Andersen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/codingexplained.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/28f5826f9d5d544b0c5e1ec321dfdfb8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/28f5826f9d5d544b0c5e1ec321dfdfb8?s=96&d=mm&r=g\",\"caption\":\"Bo Andersen\"},\"description\":\"I am a back-end web developer with a passion for open source technologies. I have been a PHP developer for many years, and also have experience with Java and Spring Framework. I currently work full time as a lead developer. Apart from that, I also spend time on making online courses, so be sure to check those out!\",\"sameAs\":[\"https:\/\/codingexplained.com\",\"https:\/\/www.facebook.com\/codingexplained\",\"https:\/\/www.linkedin.com\/in\/ba0708\",\"https:\/\/twitter.com\/codingexplained\",\"https:\/\/www.youtube.com\/c\/codingexplained\"],\"url\":\"https:\/\/codingexplained.com\/author\/andy\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Field Data Types","description":"There are many field data types in Elasticsearch. This article walks through the most important data types in Elasticsearch.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types","og_locale":"en_US","og_type":"article","og_title":"Field Data Types","og_description":"There are many field data types in Elasticsearch. This article walks through the most important data types in Elasticsearch.","og_url":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types","og_site_name":"Coding Explained","article_publisher":"https:\/\/www.facebook.com\/codingexplained","article_author":"https:\/\/www.facebook.com\/codingexplained","article_published_time":"2016-01-16T20:00:59+00:00","article_modified_time":"2017-06-11T16:53:52+00:00","og_image":[{"width":1200,"height":444,"url":"https:\/\/codingexplained.com\/wp-content\/uploads\/2015\/11\/codingexplained-fb-promote.png","type":"image\/png"}],"author":"Bo Andersen","twitter_card":"summary_large_image","twitter_creator":"@codingexplained","twitter_site":"@codingexplained","twitter_misc":{"Written by":"Bo Andersen","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types","url":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types","name":"Field Data Types","isPartOf":{"@id":"https:\/\/codingexplained.com\/#website"},"datePublished":"2016-01-16T20:00:59+00:00","dateModified":"2017-06-11T16:53:52+00:00","author":{"@id":"https:\/\/codingexplained.com\/#\/schema\/person\/e19c92ec991f571605f047cefeaa950d"},"description":"There are many field data types in Elasticsearch. This article walks through the most important data types in Elasticsearch.","breadcrumb":{"@id":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/codingexplained.com\/coding\/elasticsearch\/field-data-types#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/codingexplained.com\/"},{"@type":"ListItem","position":2,"name":"Field Data Types"}]},{"@type":"WebSite","@id":"https:\/\/codingexplained.com\/#website","url":"https:\/\/codingexplained.com\/","name":"Coding Explained","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/codingexplained.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/codingexplained.com\/#\/schema\/person\/e19c92ec991f571605f047cefeaa950d","name":"Bo Andersen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codingexplained.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/28f5826f9d5d544b0c5e1ec321dfdfb8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/28f5826f9d5d544b0c5e1ec321dfdfb8?s=96&d=mm&r=g","caption":"Bo Andersen"},"description":"I am a back-end web developer with a passion for open source technologies. I have been a PHP developer for many years, and also have experience with Java and Spring Framework. I currently work full time as a lead developer. Apart from that, I also spend time on making online courses, so be sure to check those out!","sameAs":["https:\/\/codingexplained.com","https:\/\/www.facebook.com\/codingexplained","https:\/\/www.linkedin.com\/in\/ba0708","https:\/\/twitter.com\/codingexplained","https:\/\/www.youtube.com\/c\/codingexplained"],"url":"https:\/\/codingexplained.com\/author\/andy"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3mJkW-Ar","_links":{"self":[{"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/posts\/2259"}],"collection":[{"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/comments?post=2259"}],"version-history":[{"count":8,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/posts\/2259\/revisions"}],"predecessor-version":[{"id":2908,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/posts\/2259\/revisions\/2908"}],"wp:attachment":[{"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/media?parent=2259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/categories?post=2259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/tags?post=2259"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/codingexplained.com\/wp-json\/wp\/v2\/series?post=2259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}