es:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_exact_values_vs_full_text.html
下一篇:http://my.oschina.net/qiangzigege/blog/265360
内容
数据类型可以分为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首先分析文本,然后使用结果来建立倒排索引,
我们将讨论倒排索引和分析过程。