Elasticsearch 建模
mappings有点类似我们定义 MySQL的 数据库表结构的时候,需要指定每个字段的名字,其数据类型一样。当然,这个定义过程,也指明了这个表结构一共含有多少个字段了。对于ES而言,就相当于指定了一个document有多少field,每个field的数据类型,注意,这个比MySQL定义表过程,还多了一个有用的操作,就是指定每个字段可用的分析器(analyzer). 当然,不指定的话,就是采用默认的standard analyzer,当然你也可以指定某个字段不需要分析器(not_analyzed).
ES支持的数据类型:
- 简单数据类型:string, date, long, double,integer,boolean 以及ip等等
- 层级结构类型:JSON型的object,嵌套类型 (都是JSON)
- 特殊结构类型:geo_point, geo_shape以及completion。
这些数据类型,可以在创建索引的时候,指定
下面,再来说说分析器analyzer。
ES系统默认提供了很多的分析器,最著名的是standard analyzer。另外,还有下面的一些分析器,这些分析器,可以进入官网进行深入研究。
- Simple Analyzer
- Whitespace Analyzer
- Stop Analyzer
- Keyword Analyzer
- Pattern Analyzer
- Language Analyzers
- Fingerprint Analyzer
这些分析器中,重点在于如何对待搜索的目标进行分词(token)。
下面,将通过一个简单的例子,来说说mapping的操作,以及基于standard analyzer
curl -XPUT "localhost:9210/Test"-d '{ "mappings": { "Test_Type" : { "properties" : { "session" : {"type" :"string