前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch检索分类深入详解—基础篇

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

作者头像
铭毅天下
发布2018-03-20 11:17:37
1.5K0
发布2018-03-20 11:17:37
举报
文章被收录于专栏:铭毅天下铭毅天下

Elasticsearch中当我们设置Mapping(分词器、字段类型)完毕后,就可以按照设定的方式导入数据。

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

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

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

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

0、检索概览

检索子句的行为取决于查询应用于过滤(filter)上下文还是查询/分析(query)上下文。

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

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

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

  1. 时间戳字段:是否属于2015年或2016年?
  2. 状态字段:是否设置为“已发布”?

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

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

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

综合应用场景如下:

代码语言:javascript
复制
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”的全部信息。

以下,以“脑图”的形式直观展示检索分类。

其中,3-7随着我开发深入再做更新。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0、检索概览
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档