暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ElasticSearch 打错字还能搜索到?试试 fuzzy query!

北漂码农有话说 2021-01-15
1408

咱们来学习一个简单的词项查询,也就是 term 查询。在本系列之前的文章中,我们已经多次涉及到这个技能点,但是没有细讲,今天我们就来从头理一下 term 查询。

词项查询:

以下是视频笔记:

注意,笔记只是视频内容的一个简要记录,因此笔记内容比较简单,完整的内容可以查看视频。

16.1 term query

词项查询。词项查询不会分析查询字符,直接拿查询字符去倒排索引中比对。

GET books/_search
{
  "query": {
    "term": {
      "name""程序设计"
    }
  }
}

16.2 terms query

词项查询,但是可以给多个关键词。

GET books/_search
{
  "query": {
    "terms": {
      "name": ["程序","设计","java"]
    }
  }
}

16.3 range query

范围查询,可以按照日期范围、数字范围等查询。

range query 中的参数主要有四个:

  • gt
  • lt
  • gte
  • lte

案例:

GET books/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lt": 20
      }
    }
  },
  "sort": [
    {
      "price": {
        "order""desc"
      }
    }
  ]
}

16.4 exists query

exists query 会返回指定字段中至少有一个非空值的文档:

GET books/_search
{
  "query": {
    "exists": {
      "field""javaboy"
    }
  }
}

注意,空字符串也是有值。null 是空值。

16.5 prefix query

前缀查询,效率略低,除非必要,一般不太建议使用。

给定关键词的前缀去查询:

GET books/_search
{
  "query": {
    "prefix": {
      "name": {
        "value""大学"
      }
    }
  }
}

16.6 wildcard query

wildcard query 即通配符查询。支持单字符和多字符通配符:

  • ?表示一个任意字符。
  • *
    表示零个或者多个字符。

查询所有姓张的作者的书:

GET books/_search
{
  "query": {
    "wildcard": {
      "author": {
        "value""张*"
      }
    }
  }
}

查询所有姓张并且名字只有两个字的作者的书:

GET books/_search
{
  "query": {
    "wildcard": {
      "author": {
        "value""张?"
      }
    }
  }
}

16.7 regexp query

支持正则表达式查询。

查询所有姓张并且名字只有两个字的作者的书:

GET books/_search
{
  "query": {
    "regexp": {
      "author""张."
    }
  }
}

16.8 fuzzy query

在实际搜索中,有时我们可能会打错字,从而导致搜索不到,在 match query 中,可以通过 fuzziness 属性实现模糊查询。

fuzzy query 返回与搜索关键字相似的文档。怎么样就算相似?以LevenShtein 编辑距离为准。编辑距离是指将一个字符变为另一个字符所需要更改字符的次数,更改主要包括四种:

  • 更改字符(javb--〉java)
  • 删除字符(javva--〉java)
  • 插入字符(jaa--〉java)
  • 转置字符(ajva--〉java)

为了找到相似的词,模糊查询会在指定的编辑距离中创建搜索关键词的所有可能变化或者扩展的集合,然后进行搜索匹配。

GET books/_search
{
  "query": {
    "fuzzy": {
      "name""javba"
    }
  }
}

16.9 ids query

根据指定的 id 查询。

GET books/_search
{
  "query": {
    "ids":{
      "values":  [1,2,3]
    }
  }
}

ElasticSearch 系列其他文章:

  1. 打算出一个 ElasticSearch 教程,谁赞成,谁反对?
  2. ElasticSearch 从安装开始
  3. ElasticSearch 第三弹,核心概念介绍
  4. ElasticSearch 中的中文分词器该怎么玩?
  5. ElasticSearch 索引基本操作
  6. ElasticSearch 文档的添加、获取以及更新
  7. ElasticSearch 文档的删除和批量操作
  8. ElasticSearch 文档路由,你的数据到底存在哪一个分片上?
  9. ElasticSearch 并发的处理方式:锁和版本控制
  10. ElasticSearch 中的倒排索引到底是什么?
  11. ElasticSearch 动态映射与静态映射
  12. ElasticSearch 四种字段类型详解
  13. ElasticSearch 中的地理类型和特殊类型
  14. ElasticSearch 23 种映射参数详解
  15. ElasticSearch 如何配置某个字段的权重?
  16. ElasticSearch 23 种映射参数详解【3】
  17. ElasticSearch 映射模版
  18. ElasticSearch 搜索入门
  19. ElasticSearch 全文搜索怎么玩?

文章转载自北漂码农有话说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论