当前位置:首页 > 开发 > 行业应用 > 正文

ElasticSearch 类型映射

发表于: 2014-11-02   作者:aoyouzi   来源:转载   浏览次数:
摘要: 当查看索引里的数据,我们意识到一些奇怪的东西。 有些事情看起来有问题,我们在索引里有12个tweets,只有1个包含date 2014-09-15 现在让我们看看这些查询。   GET /_search?q=2014            &nbs
当查看索引里的数据,我们意识到一些奇怪的东西。
有些事情看起来有问题,我们在索引里有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跟其它数据的区别之一。
http://my.oschina.net/qiangzigege/blog/264662
 
 
 
 
 
数据类型可以分为2类:具体值和全文。
 
具体值,比如说日期或者一个用户ID,也可以包括具体的字符串比如用户名或者邮箱。
 
具体值 "Foo" 与具体值 "foo" 不同.
具体值2014 与具体值2014-09-15也不同.
 
全文,引用文本内容,比如tweet的文本或者email的内容。
 
全文通常理解为非结构化数据,问题是:自然语言的规则复杂,计算机难以解析,比如,考虑到以下句子:
 
May is fun but June bores me.
这是说月份还是人?
 
具体值就容易查询,一个值要么匹配查询要么不匹配。
用SQL表达如下:
 
WHERE name    = "John Smith"
   AND user_id = 2
   AND date    > "2014-09-15"
   
查询全文的数据就更微妙,
我们不仅仅问文档是否匹配查询,还要知道文档与查询有多匹配,
换句话来说,相关度如何?
 
很少情况下,我们想完全匹配文本段,而是在文本域里搜索,我们还希望搜索能够理解我们的意图。
 
一个针对于 "UK" 的搜索应该可以返回包含 "United Kingdom" 的文档。
 
一个针对于 "jump" 的搜索应该匹配 "jumped" , "jumps" , "jumping" 或许甚至匹配 "leap"
 
"johnny walker" 应该匹配 "Johnnie Walker" "johnnie depp" 应该匹配 "Johnny Depp"
 
"fox news hunting" 应该返回跟 "hunting on Fox News" 有关的故事,
"fox hunting news" 应该返回 "news stories about fox hunting" 有关的。
 
为了让这些全文字段的搜索便利,es首先分析文本,然后使用结果来建立倒排索引,
我们将讨论倒排索引和分析过程。
http://my.oschina.net/qiangzigege/blog/264761
 
 
 
 

ElasticSearch 类型映射

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
ES中有一个非常重要的特性——动态映射,即索引文档前不需要创建索引、类型等信息,在索引的同时会
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用
首先谢谢大家的支持和关注.本章主要介绍.Net类型与JSON是如何映射的.我们知道JSON中类型基本上有三
基础知识: 在 Java 中, 代表时间和日期的类型包含: java.util.Date 和 java.util.Calendar. 此外,
映射元数据是什么样的?不设置默认的情况下: 实体类Person生成表是Person表; 字段id,name,采用bean
基本知识: 在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255), 字节数组 byte[] 可
Hibernate映射类型分为两种:内置映射类型和客户化映射类型,内置映射类型负责把常见的java类型映射
基本知识: 在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255), 字节数组 byte[] 可
基础知识: 在 Java 中, 代表时间和日期的类型包括: java.util.Date 和 java.util.Calendar. 此外,
在之前的一篇文章“Unity(三):快速入门”中,给出了一个简单的示例,让我们对Unity有一个感性的认
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号