ElasticSearch 类型映射

当查看索引里的数据,我们意识到一些奇怪的东西。
有些事情看起来有问题,我们在索引里有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
 
 
 
 

猜你喜欢

转载自aoyouzi.iteye.com/blog/2151509
今日推荐