elasticsearch mapping

es的mapping设置很关键,mapping设置不到位可能导致索引重建。如何更好的设置mapping?

请看下面各个类型介绍^_^

core types

每一个JSON字段可以被映射到一个特定的核心类型。JSON本身已经为我们提供了一些输入,支持stringinteger/longfloat/doubleboolean, and null.

下面的示例tweet的JSON文档将被用来解释核心类型:

{    "tweet" {        "user" : "kimchy"        "message" : "This is a tweet!",        "postDate" : "2009-11-15T14:12:12",        "priority" : 4,        "rank" : 12.3    }}

可以显式映射为上面的JSON tweet:

{    "tweet" : {        "properties" : {            "user" : {"type" : "string", "index" : "not_analyzed"},            "message" : {"type" : "string", "null_value" : "na"},            "postDate" : {"type" : "date"},            "priority" : {"type" : "integer"},            "rank" : {"type" : "float"}        }    }}

string

基于文本的字符串类型是最基本的类型,包含一个或多个字符。可以映射一个例子:

{    "tweet" : {        "properties" : {            "message" : {                "type" : "string",                "store" : "yes",                "index" : "analyzed",                "null_value" : "na"            }        }    }}

上面的映射定义一个字符串消息属性/字段在tweet类型。字段存储在索引(所以它稍后可以被检索使用选择性加载搜索时),并得到分析(分解成可搜索条件)。如果该消息有一个空值,那么该值将被存储是na.

下表列出了所有的属性,可以使用字符串类型:

Attribute                                                                 Description


index_name                                   字段的名称,将存储在索引中。默认属性/字段名.

   store                                            设置为yes来存储实际的字段索引,没有不存储它。默认为没                                                            有(注意,JSON文档本身是存储,可以从它检索)。
   index                                            为该领域设置为分析索引和搜索在被分解成令牌使用分析                                                              仪。不分析意味着其仍可搜索,但没有经过任何分析过程或分                                                          解为令牌。不意味着它不会搜索(作为一个单独字段,它可能仍                                                        然被包括在所有)。设置没有禁用包含在所有。默认为分析。 
  term_vector                                  可能的值是不,是的,与补偿,与职位,与位置偏移。默认为没                                                              有。
   boost                                            该boost的值,默认是1.0。
   null_value                                   当有一个(JSON)null值的字段,可以使用null值的字段值。默认                                                        为不添加字段在所有。 
   omit_norms                                   布尔值如果规范应该省略或不是。默认值为假的分析领域,适                                                          用于不分析领域。
   omit_term_freq_and_positions   布尔值如果术语和位置应该忽略频率。默认值为假。弃用自                                                          0.20,看到指数期权。
   index_options                             自从0.20可用。允许设置索引选项,可能的值是文档(只有doc                                                          数字索引),freqs(doc数字和词的频率),和职位(doc数字,词的频                                                        率和位置)。默认位置分析领域,和文档中没有分析领域。因为                                                        0.90也可以设置偏移量(doc数字,词的频率,位置和补偿)。
   analyzer                                       这个分析仪用于分析文本内容分析时在索引和搜索时使用查                                                          询字符串。默认为全球配置分析仪。
 
index_analyzer                            这个分析仪用于分析文本内容分析时在索引。

   search_analyzer                          这个分析仪用于分析场当一部分查询字符串。可以更新现有                                                          的字段。
   include_in_all                            应该被包括在这个领域的所有字段(如果启用)。如果索引设置                                                        为无默认值为false,否则,默认为true或父对象类型设置。
   ignore_above                                这个分析器将忽略字符串大于这个尺寸。用于通用不分析领                                                           域,应该忽略长文本。(因为@0.19.9)。
   position_offset_gap                   位置增量字段实例之间的差距与相同的字段名。默认值为0。

字符串类型也支持自定义索引参数相关的索引值。例如:

{    "message" : {        "_value":  "boosted value",        "_boost":  2.0    }}

需要消除歧义的映射文档的含义。否则,该结构将解释“消息”作为“对象”类型的值。键值(或价值)在内部文档指定字符串内容,最终真正应该被编入索引。促进(或提高)键指定每个字段的文档增加(这里是2.0)。

number

许多类型的基础支持浮动,双,字节,短、整数和长。它使用特定的构造在Lucene为了支持数字值。数字类型有相同的范围作为相应的Java类型。一个例子可以映射:

{    "tweet" : {        "properties" : {            "rank" : {                "type" : "float",                "null_value" : 1.0            }        }    }}

在这里多举几个常用的例子:

例1:当某一个字段要分词搜索, 则index就要设置相应的分词器,store设置为true

例2:当某一个字段要facet(分组统计),则必须设置这个字段为no_analyzerd(不分词);原因是字段不设置分词,默认是一元分词。

例3:搜索关键字相应分数,对一些排名算法有一定的帮助,可以为一些重要字段设置分值(boost)

例4:时间格式问题,es支持format时间格式。(format:yyyy-MM-dd HH:mm:ss.SSS)

……

本文出自 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#mapping-core-types

时间: 2024-10-03 22:16:15

elasticsearch mapping的相关文章

通过Java的Domain类构建ElasticSearch的mapping

通过给定一个Java的class类自行创建ElasticSearch的mapping Order的domain类 public class Order { public String system_id; public String finger_id; public String merchant_id; public Double tx_money; public String pay_date; public String payment_status; public Date settl

ElasticSearch 全文检索— ElasticSearch 核心概念

ElasticSearch核心概念-Cluster 1)代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的. 2)主节点的职责是负责管理集群状态,包括管理分片的状态和副本的状态,以及节点的发现和删除. 3)注意:主节点不负责对数据的增删改查请求进行处理,只负责维护集

用ElasticSearch监控MySQL

介绍 本文是一个使用ELK来监控mysql的介绍,基本监控了一些关键指标,当然根据业务的不同,可能有不同的指标需求,但使用该方法监控,原理不会变化,非常适合入门. ELK是一个非常强大的软件组合,在github上有开源,star数大的惊人,感兴趣的朋友可以了解下,这套工具学习曲线比较陡峭,推荐使用本文提到的mysqlbeat这类简单的工具作为采集工具开始,一开始先不使用官方提供的beat,一方面是因为默认的配置什么数据都上报,浪费存储空间,另一方面复杂的嵌套表结构(document)更增加了学习

脚本命令加载外部配置文件夹conf

加载log4j配置文件 Log4iConfigurer类 public class Log4iConfigurer { private static boolean INITIALIZED = false; public static void initLogger(){ if(!INITIALIZED&&!isConfigured()){ InputStream is =Log4iConfigurer.class.getClassLoader().getResourceAsStream(

elasticsearch index 之 put mapping

mapping机制使得elasticsearch索引数据变的更加灵活,近乎于no schema.mapping可以在建立索引时设置,也可以在后期设置.后期设置可以是修改mapping(无法对已有的field属性进行修改,一般来说只是增加新的field)或者对没有mapping的索引设置mapping.put mapping操作必须是master节点来完成,因为它涉及到集群matedata的修改,同时它跟index和type密切相关.修改只是针对特定index的特定type. 在Action su

Elasticsearch搜索API使用一:创建索引并指定索引类型的mapping

ES默认是动态创建索引和索引类型的mapping的.这就相当于无需定义Solr中的Schema,无需指定各个字段的索引规则就可以索引文件,很方便.但有时方便就代表着不灵活.比如,ES默认一个字段是要做分词的,但我们有时要搜索匹配整个字段却不行.如有统计工作要记录每个城市出现的次数.对于NAME字段,若记录"new york"文本,ES可能会把它拆分成"new"和"york"这两个词,分别计算这个两个单词的次数,而不是我们期望的"new

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字段的类型以及相关属性elasticsearch会根据json源数据的基础类型猜测你想要的字段映射,将输入的数据转换成可搜索的索引项,mapping就是我们自己定义的字段数据类型,同时告诉elasticsearch如何索引数据以及是否可以被搜索 作用:会让索引建立的更加细致和完善 类型:静态映射和动态

ElasticSearch Index API && Mapping

ElasticSearch  NEST Client 操作Index var indexName="twitter"; var deleteIndexResponse = client.DeleteIndex(indexName);                var createIndexResponse = client.CreateIndex(indexName);                var getIndexResponse = client.GetIndex(in

ElasticSearch 基础(4) - Mapping

一.Mapping概述 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成Full-text或者精确的字符串值. ES需要知道每个字段里面都包含了什么类型.这些类型和字段的信息存储(包含)在映射(mapping)中. 索引中每个文档都有一个类型(type).每个类型都拥有自己的映射(mapping)或者模式定义(schema definition). 一个映射定义了字段类型,每个字段的数据类型,以及字段被Elasticsearch处理的方式.映射还用于设置关联到类型上的元数据