-
Introduction
- 入门
- 分布式集群
- 数据
- 分布式增删改查
- 搜索
- 映射和分析
- 结构化查询
- 排序
- 分布式搜索
- 索引管理
- 深入分片
- 结构化搜索
- 全文搜索
- 多字段搜索
- 模糊匹配
- Partial_Matching
- Relevance
- Language intro
- Identifying words
- Token normalization
- Stemming
- Stopwords
- Synonyms
- Fuzzy matching
-
Aggregations
-
overview
-
circuit breaker fd settings
-
filtering
-
facets
-
docvalues
-
eager
-
breadth vs depth
-
Conclusion
-
concepts buckets
-
basic example
-
add metric
-
nested bucket
-
extra metrics
-
bucket metric list
-
histogram
-
date histogram
-
scope
-
filtering
-
sorting ordering
-
approx intro
-
cardinality
-
percentiles
-
sigterms intro
-
sigterms
-
fielddata
-
analyzed vs not
-
overview
- 地理坐标点
- Geohashe
- 地理位置聚合
- 地理形状
- 关系
- 嵌套
- Parent Child
- Scaling
- Cluster Admin
- Deployment
- Post Deployment
确切值(Exact values) vs. 全文文本(Full text)
Elasticsearch中的数据可以大致分为两种类型:
确切值 及 _全文文本_。
确切值是确定的,正如它的名字一样。比如一个date或用户ID,也可以包含更多的字符串比如username或email地址。
确切值"Foo"
和"foo"
就并不相同。确切值2014
和2014-09-15
也不相同。
全文文本,从另一个角度来说是文本化的数据(常常以人类的语言书写),比如一篇推文(Twitter的文章)或邮件正文。
全文文本常常被称为非结构化数据
,其实是一种用词不当的称谓,实际上自然语言是高度结构化的。
问题是自然语言的语法规则是如此的复杂,计算机难以正确解析。例如这个句子:
May is fun but June bores me.
copy
到底是说的月份还是人呢?
确切值是很容易查询的,因为结果是二进制的 -- 要么匹配,要么不匹配。下面的查询很容易以SQL表达:
WHERE name = "John Smith"
AND user_id = 2
AND date > "2014-09-15"
copy
而对于全文数据的查询来说,却有些微妙。我们不会去询问这篇文档是否匹配查询要求?
。
但是,我们会询问这篇文档和查询的匹配程度如何?
。换句话说,对于查询条件,这篇文档的_相关性_有多高?
我们很少确切的匹配整个全文文本。我们想在全文中查询包含查询文本的部分。不仅如此,我们还期望搜索引擎能理解我们的意图:
一个针对
"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)**,然后使用结果建立一个倒排索引**。我们将在以下两个章节讨论倒排索引及分析过程。