ES中的数据可以广义的分为两种类型:精确值和全文值
精确值就是想他们本来的意思一样存储。例如,date或者用户ID,可以作为精确的string类型进行存储,就像一个用户名或邮箱地址一样,精确的值“Foo”和精确值”foo“是不同的,精确值2014和精确值2014-09-15也是不同的。
全文字,也就是和文本数据——常常使用人类语言进行存储,就像是tweet中的texti或邮件的消息体。
full
text常常是”未结构化的数据“,这样说有点不合适,自然语言是高度的结构化的。问题是自然语言的标准是复杂的,这使得让计算机正确解析自然语言是很复杂的。例如:
May is fun but June bores me.
这个是指月份呢还是指人呢?
精确的数值让查询变得简单。这个决定是二进制的(The decision is
binary)——一个数值要么匹配查询,要么不匹配。就像是使用SQL表达式一样简单:
WHERE name ="John Smith"
AND user_id =2
AND date >"2014-09-15"
全文数据搜索是很微妙的,我们不但但是搜素”Does this document match the
query“而是”How well does this document match the
query?”也就是说document符合我们搜索的层度。
我们很少希望精确匹配这个字段,而是我们希望搜索的条件是包含在字段中。不进如此,我们还希望搜索明白我们的意图,比如:
1:搜索“UK”应该返回有关“United Kingdom”的document。
2:搜索“jump”应该返回符合“jumped”,“jumps”,“jumping”甚至是“leap”。
3:“johnny walker“应该匹配”Johnny Waler“、”johnnie depp“应该匹配”Johnny Deep“
4:fox news hunting”应该返回有关Fox news的hunting,然而“fox hunting
news”应该返回有关hunting的news。
为了有利于在全文字段对这些类型的查询 ,ES首先analyzes这些文字,然后使用结果构建一个inverted
index,我们会在接下来的两个章节讨论inverted index和analysis。
原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_exact_values_vs_full_text.html