Elasticsearch:使用 query_string 查询的短语及模糊查询

这篇具有很好参考价值的文章主要介绍了Elasticsearch:使用 query_string 查询的短语及模糊查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在我之前的文章系列里,我详细描述了 query_string 的一些功能:

  • Elasticsearch: query_string 查询
  • Elasticsearch:以更简单的方式编写具有逻辑条件的 Elasticsearch 查询 - query_string
  • Elasticsearch:理解 query_string 和 simple_query_string 查询

在今天的文章中,我们来聊聊 query_string 中的一下特殊查询。

使用 query_string 查询的短语查询

如果您想知道是否支持使用 query_string 进行短语搜索,确实有。 我们唯一需要注意的是短语必须用引号引起来。 也就是说,对应于该短语的引号必须被转义; 例如,"query": "\"Design Patterns\""。 下一个清单中的查询搜索一个短语。

PUT books/_doc/1
{
  "synopsis": "I am making the code better"
}

GET books/_search
{
  "query": {
    "query_string": {
      "query": "\"making the code better\"",
      "default_field": "synopsis"
    }
  }
}

上面讲返回如下的结果:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.1507283,
    "hits": [
      {
        "_index": "books",
        "_id": "1",
        "_score": 1.1507283,
        "_source": {
          "synopsis": "I am making the code better"
        }
      }
    ]
  }
}

如果我们做如下的搜索:

GET books/_search
{
  "query": {
    "query_string": {
      "query": "\"making the better code\"",
      "default_field": "synopsis"
    }
  }
}

在上面,我们把 code 及 better 调换过来,我们发现就没有搜索到结果。很显然这是一个 phrase 查询。

顺其自然,如果短语中缺少一两个单词,我们可以使用 slop 参数。

例如,以下清单中的代码演示了 phrase_slop 参数如何允许短语中缺少单词(the 从短语中删除)并且仍然获得成功的结果。

GET books/_search
{
  "query": {
    "query_string": {
      "query": "\"making code better\"", 
      "default_field": "synopsis",
      "phrase_slop": 1 
    }
  }
}

上面的搜索可以搜索到我们之前写入的文档。查询遗漏了一个词,但是 phrased_slop 设置原谅了遗漏,因此,我们得到了想要的结果。

同样地,我们可以针对如下的搜索来进行:

GET books/_search
{
  "query": {
    "query_string": {
      "query": "\"making the code better\"",
      "default_field": "synopsis",
      "phrase_slop": 2
    }
  }
}

在上面,尽管 code 和 better 是倒置的,我们需要设置 phrase_stop 为 2 才可以搜索到。有关 slop 的定义,请详细阅读文章 “开始使用 Elasticsearch (2)” 中的 “匹配短语” 章节。

使用 query_string 查询的模糊查询

我们还可以通过使用带有 query_string queries 的模糊查询来要求 Elasticsearch 原谅拼写错误。 我们需要做的就是在查询条件后面加上波浪号 (~) 运算符。

下面的清单演示了一个示例,可以最好地理解这一点。

PUT books/_doc/2
{
  "title": "I like these patterns"
}

GET books/_search
{
  "query": {
    "query_string": {
      "query": "Pattenrs~", 
      "default_field": "title"
    }
  }
}

上面搜索的结果为:

{
  "took": 853,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.25172183,
    "hits": [
      {
        "_index": "books",
        "_id": "2",
        "_score": 0.25172183,
        "_source": {
          "title": "I like these patterns"
        }
      }
    ]
  }
}

通过使用 ~ 运算符设置后缀,我们请求引擎将查询视为模糊查询。 默认情况下,使用模糊查询时使用的编辑距离为 2。

编辑距离是将一个字符串转换为另一个字符串所需的突变数。 例如,“CAT” 需要编辑距离为 1 才能将其转换为“CAP”。有关这个编辑距离的更多知识,请参阅文章 “Elasticsearch:fuzzy 搜索 (模糊搜索)”。

查询使用 Levenshtein 距离算法来支持模糊查询。 然而,还有另一种类型的编辑距离算法,称为 Damerau–Levenshtein 距离算法。 事实上,Damerau–Levenshtein 距离用于支持模糊查询。 它支持最多两个字符的插入、删除或替换,以及相邻字符的调换。

> Levenshtein 距离算法定义了将一个字符串转换为另一个字符串所需的最少突变数。 这些突变包括插入、删除和替换。 Damerau–Levenshtein 距离算法更进了一步。 除了具有 Levenshtein 定义的所有突变之外,Damerau-Levenshtein 算法还考虑了相邻字符的转置(例如,TB-> BT -> BAT)。

默认情况下,query_stringquery 中的编辑距离为 2,但如果需要,我们可以通过在波浪号后设置 1 来减少它,如下所示:“Patterns~1”。比如:

GET books/_search
{
  "query": {
    "query_string": {
      "query": "Pattenrs~1", 
      "default_field": "title"
    }
  }
}

上述搜索结果将返回我们之前输入的文档。文章来源地址https://www.toymoban.com/news/detail-484126.html

到了这里,关于Elasticsearch:使用 query_string 查询的短语及模糊查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch:使用查询规则(query rules)进行搜索

    在之前的文章 “Elasticsearch 8.10 中引入查询规则 - query rules”,我们详述了如何使用 query rules 来进行搜索。这个交互式笔记本将向你介绍如何使用官方 Elasticsearch Python 客户端来使用查询规则。 你将使用 query rules API 将查询规则存储在 Elasticsearch 中,并使用 rule_query 查询它们。

    2024年02月21日
    浏览(34)
  • ElasticSearch系列 - SpringBoot整合ES:短语匹配查询 match_phrase

    1. ElasticSearch match_phrase查询是什么?它与match查询有什么区别? match_phrase查询是一种用于匹配短语的查询方式,可以用于精确匹配多个单词组成的短语。它会将查询字符串分解成单词,然后按照顺序匹配文档中的单词,只有当文档中的单词顺序与查询字符串中的单词顺序完全

    2024年02月12日
    浏览(41)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL术语级别查询并结合springboot使用

    Elasticsearch 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)来定义查询。 因Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,所以我们在使用springboot的时候也可以很方便的进行集成,本文主要讲述的就是使用springboot实现各类DSL的语法查询。 Elastics

    2024年02月01日
    浏览(39)
  • ElasticSearch入门:使用ES来实现模糊查询功能

    本文针对在工作中遇到的需求:通过es来实现 模糊查询 来进行总结;模糊查询的具体需求是:查询基金/A股/港股等金融数据,要求可以根据 字段 , 拼音首字母 , 部分拼音全称 进行联想查询;需要注意的是,金融数据名称中可能不止包含汉字,还有英文,数字,特殊字符等

    2023年04月09日
    浏览(37)
  • Elasticsearch Boolean Query查询介绍

    前言 ES 和 Solr 的底层都是基于Apache Lucene 实现,bool 查询的底层实现是Lucene 的 BooleanQuery,其可以组合多个子句查询,类似 SQL 语句里面的 OR 查询。 查询介绍 在 ES 里面 Boolean 查询封装了 4 种 API 接口能力,可以单独使用,也可以组合使用,总结如下: 函数 描述 must query 关键

    2024年02月13日
    浏览(39)
  • ElasticSearch Index查询(Query DSL)

    先贴一个Query DSL的官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 我平时喜欢查看官方文档,了解数据查询和存储方面的性能优化点,下面是积累的脚本分享。 查询语句格式 查询类型:match_all,match,term,range,fuzzy,bool 等等 查询条件:查询条件会根

    2024年02月07日
    浏览(37)
  • Elasticsearch复合查询之Boosting Query

    前言 ES 里面有 5 种复合查询,分别是: Boolean Query Boosting Query Constant Score Query Disjunction Max Query Function Score Query Boolean Query在之前已经介绍过了,今天来看一下 Boosting Query 用法,其实也非常简单,总结起来就一句话,对不期待的查询进行相关性降分。 Boost 加权机制底层

    2024年02月12日
    浏览(31)
  • ElasticSearch级查询Query DSL上

    目录 ES高级查询Query DSL match_all 返回源数据_source 返回指定条数size 分页查询fromsize 指定字段排序sort 术语级别查询 Term query术语查询 Terms Query多术语查询 exists query ids query range query范围查询 prefix query前缀查询 wildcard query通配符查询 fuzzy query模糊查询        ES中提供了一种强大

    2024年02月20日
    浏览(45)
  • ElasticSearch 高级查询语法Query DSL实战

    ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language 领域专用语言) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 官方文档:https://www.elastic.co/guide/en/elasti

    2024年02月07日
    浏览(36)
  • Elasticsearch 查询之Function Score Query

    前言 ES 的主查询评分模式分为两种,是信息检索领域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分(relevance scoring)算法。在此之前,Elasticsearch 使用的是 TF-IDF 算法作为默认的文档评分算法。从版本 5.0 起,BM25 算法取代

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包