ES权威指南[官方文档学习笔记]-54 Mapping and analysis

es:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-analysis.html

下一篇:http://my.oschina.net/qiangzigege/blog/264761

内容

当查看索引里的数据,我们意识到一些奇怪的东西。
有些事情看起来有问题,我们在索引里有12个tweets,只有1个包含date 2014-09-15
现在让我们看看这些查询。

GET /_search?q=2014              # 12 results
GET /_search?q=2014-09-15        # 12 results !
GET /_search?q=date:2014-09-15   # 1  result
GET /_search?q=date:2014         # 0  results !
PS:如果你看了上一篇文章,你就知道哪个查询用了_all字段,哪个查询没有用这个字段。

为什么会有这些差别?

可能是因为_all索引数据的方式不同于date字段索引数据的方式。
让我们看一看es如何解释我们的文档结构,这是通过请求gb索引的tweet type的mapping信息。

GET /gb/_mapping/tweet
结果如下:
{
   "gb": {
      "mappings": {
         "tweet": {
            "properties": {
               "date": {
                  "type": "date",
                  "format": "dateOptionalTime"
               },
               "name": {
                  "type": "string"
               },
               "tweet": {
                  "type": "string"
               },
               "user_id": {
                  "type": "long"
               }
            }
         }
      }
   }
}

es已经为我们自动创建了mapping.当然,这是它自己猜测的。

响应告诉我们date域已经被识别为date类型,
_all字段没有提及是因为它是一个默认字段,当然了,我们知道_all字段是string类型。

这样,日期类型的字段和字符串类型的字段的索引方式是不同的,因为寻找过程也是不同的。
一点也不奇怪。

也许,你希望核心类型:strings,number,booleans,dates都以不同的方式索引,而且事实上,它们之间确实有细微差别。

但是,目前为止,最大的差别在于表示具体值的字段和表示全文的字段之间。
这个区别很重要,这是es跟其它数据的区别之一。


 

你可能感兴趣的:(elasticsearch)