ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 确切值(Exact values) vs. 全文文本(Full text) Elasticsearch中的数据可以大致分为两种类型: _确切值_ 及 _全文文本_。 确切值是确定的,正如它的名字一样。比如一个date或用户ID,也可以包含更多的字符串比如username或email地址。 确切值`"Foo"`和`"foo"`就并不相同。确切值`2014`和`2014-09-15`也不相同。 全文文本,从另一个角度来说是文本化的数据(常常以人类的语言书写),比如一篇推文(Twitter的文章)或邮件正文。 **** 全文文本常常被称为`非结构化数据`,其实是一种用词不当的称谓,实际上自然语言是高度结构化的。 问题是自然语言的语法规则是如此的复杂,计算机难以正确解析。例如这个句子: May is fun but June bores me. 到底是说的月份还是人呢? **** 确切值是很容易查询的,因为结果是二进制的 -- 要么匹配,要么不匹配。下面的查询很容易以SQL表达: ```javascript 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"`也能返回关于fox hunting的新闻故事。 为了方便在全文文本字段中进行这些类型的查询,Elasticsearch首先对文本**分析(analyzes)**,然后使用结果建立一个**倒排索引**。我们将在以下两个章节讨论倒排索引及分析过程。