映射及分析
映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型(string, number, booleans, date等)。
分析(analysis)机制用于进行全文文本(Full Text)的分词,以建立供搜索用的倒排索引。
当在索引中处理数据时,我们注意到一些奇怪的事。有些东西似乎被破坏了,如:在索引中有12个tweets,只有一个包含日期2014-09-15,但是、查询中的total hits返回了所有的tweets,而针对date字段进行年度查询却什么都不返回。
为什么我们的结果因查询_all字段(译者注:默认所有字段中进行查询)或date字段而变得不同?
想必是因为我们的数据在_all字段的索引方式和在date字段的索引方式不同而导致。
让我们看看Elasticsearch在对gb索引中的tweet类型进行mapping(也称之为模式定义[注:此词有待重新定义(schema definition)])后是如何解读我们的文档结构:
Elasticsearch为对字段类型进行猜测,动态生成了字段和类型的映射关系。返回的信息显示了date字段被识别为date类型。_all因为是默认字段所以没有在此显示,不过我们知道它是string类型。
date类型的字段和string类型的字段的索引方式是不同的,因此导致查询结果的不同。
在Elasticsearch中每一种核心数据类型(strings, numbers, booleans及dates)以不同的方式进行索引。
但是更大的区别在于确切值(exact values)(比如string类型)及全文文本(full text)之间。
这两者的区别才真的很重要 - 这是区分搜索引擎和其他数据库的根本差异。
确切值与全文将在下篇文章做解释。