映射及分析
映射(mapping)機(jī)制用于進(jìn)行字段類型確認(rèn),將每個字段匹配為一種確定的數(shù)據(jù)類型(string,?number,?booleans,?date等)。
分析(analysis)機(jī)制用于進(jìn)行全文文本(Full Text)的分詞,以建立供搜索用的倒排索引。
當(dāng)在索引中處理數(shù)據(jù)時,我們注意到一些奇怪的事。有些東西似乎被破壞了,如:在索引中有12個tweets,只有一個包含日期2014-09-15,但是、查詢中的total?hits返回了所有的tweets,而針對date字段進(jìn)行年度查詢卻什么都不返回。

為什么我們的結(jié)果因查詢_all字段(譯者注:默認(rèn)所有字段中進(jìn)行查詢)或date字段而變得不同?
想必是因?yàn)槲覀兊臄?shù)據(jù)在_all字段的索引方式和在date字段的索引方式不同而導(dǎo)致。
讓我們看看Elasticsearch在對gb索引中的tweet類型進(jìn)行mapping(也稱之為模式定義[注:此詞有待重新定義(schema definition)])后是如何解讀我們的文檔結(jié)構(gòu):


Elasticsearch為對字段類型進(jìn)行猜測,動態(tài)生成了字段和類型的映射關(guān)系。返回的信息顯示了date字段被識別為date類型。_all因?yàn)槭悄J(rèn)字段所以沒有在此顯示,不過我們知道它是string類型。
date類型的字段和string類型的字段的索引方式是不同的,因此導(dǎo)致查詢結(jié)果的不同。
在Elasticsearch中每一種核心數(shù)據(jù)類型(strings, numbers, booleans及dates)以不同的方式進(jìn)行索引。
但是更大的區(qū)別在于確切值(exact values)(比如string類型)及全文文本(full text)之間。
這兩者的區(qū)別才真的很重要 - 這是區(qū)分搜索引擎和其他數(shù)據(jù)庫的根本差異。
確切值與全文將在下篇文章做解釋。