Elasticsearch检索分类深刻详解—基础篇

转载自服务号【铭毅天下】 mysql

Elasticsearch中当咱们设置Mapping(分词器、字段类型)完毕后,就能够按照设定的方式导入数据。 正则表达式

有了数据后,咱们就须要对数据进行检索操做。根据实际开发须要,每每咱们须要支持包含但不限于如下类型的检索:
1)精确匹配,相似mysql中的 “=”操做;
2)模糊匹配,相似mysql中的”like %关键词% “查询操做;
3)前缀匹配;
4)通配符匹配;
5)正则表达式匹配;
6)跨索引匹配;
7)提高精读匹配。sql

细数一下,咱们的痛点在于:
1)ES究竟支持哪些检索操做?缓存

2)如何实现ES精确值检索、指定索引检索、全文检索? app

这些就是本文着重参考ES最新官方文档,针对ES5.X版本探讨的内容。ide

0、检索概览
检索子句的行为取决于查询应用于过滤(filter)上下文仍是查询/分析(query)上下文。性能

过滤上下文——对应于结构化检索
1)核心回答的问题是:“这个文档是否符合这个查询条款?” blog

2)答案是简单的是或否,不计算分数。 索引

3)过滤器上下文主要用于过滤结构化数据。相似于Mysql中断定某个字段是否存在:
例如: 开发

时间戳字段:是否属于2015年或2016年?

状态字段:是否设置为“已发布”?

常常使用的过滤器将被Elasticsearch自动缓存,以加快性能。

分析上下文——对应于全文检索
1)核心回答了“本文档与此查询子句是否匹配?”的问题。

2)除了决定文档是否匹配以外,查询子句还会计算一个_score,表示文档与其余文档的匹配程度。

综合应用场景以下:

GET /_search
{ "query": { "bool": { "must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
], "filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
以上检索,title中包含"Search”而且content中包含 “Elasticsearch”,status中精确匹配”published”,而且publish_date 大于“2015-01-01”的所有信息。

如下,以“脑图”的形式直观展现检索分类。
Elasticsearch检索分类深刻详解—基础篇
其中,3-7随着我开发深刻再作更新。

请点击左下方的“阅读原文”,进入个人博客,查看每种子类型检索的详情。

阅读原文

相关文章
相关标签/搜索