ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、match

1.1 不同字段权重

        如果需要为不同字段设置不同权重,可以考虑使用 bool 查询的 should 子句来组合多个 match 查询,并为每个 match 查询设置不同的权重。

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "product_name": {
              "query": "apple",
              "boost": 3
            }
          }
        },
        {
          "match": {
            "description": {
              "query": "apple",
              "boost": 1
            }
          }
        }
      ]
    }
  }
}

        上面的查询将在 product_name 字段和 description 字段中搜索包含 “apple” 的文档,并为 product_name 字段设置权重为 3,而为 description 字段设置权重为 1。这样,在计算匹配得分时,product_name 字段的匹配将比 description 字段的匹配更加重要,因为它的权重更高。

        这种方式可以灵活地控制不同字段的权重,以满足不同的搜索需求。

2、match_pharse

        match_phrase 查询是 Elasticsearch 中一种用于精确匹配短语的查询方式,可以确保查询字符串中的关键词按照给定的顺序在文档中连续出现。以下是 match_phrase 查询的用法:

2.1 简单用法

        match_phrase 查询可以直接指定一个字段和一个短语进行匹配。

GET grade2/_search
{
  "query": {
    "match_phrase": {
      "character": "谦虚 态度"
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

上面的查询将在 character字段中搜索包含短语 “谦虚 态” 的文档。

2.2 位置信息

        match_phrase 查询会记录匹配短语在文档中的位置信息,可以通过 slop 参数指定允许的位置偏移量。

GET grade2/_search
{
  "query": {
    "match_phrase": {
      "character": {
        "query": "谦虚 赞扬",
        "slop": 2
      }
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

3、multi_match

        multi_match 查询是 Elasticsearch 中一种用于在多个字段中搜索相同查询字符串的查询方式。它可以在多个字段之间执行相同的查询,并且可以指定不同字段之间的权重(boost),从而影响匹配的相对重要性。

3.1 简单用法

        multi_match 查询可以直接指定一个查询字符串,然后在多个字段中进行搜索。

GET grade2/_search
{
  "query": {
    "multi_match": {
      "query": "张一",
      "fields": ["name", "character"]
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

上面的查询将在 name和 character字段中搜索包含 “张一” 的文档。

3.2 类型匹配

multi_match 查询可以通过 type 参数指定匹配的类型,如 “best_fields”、 “most_fields”、 “cross_fields”、 “phrase”、 “phrase_prefix” 等。不同的类型在匹配方式和结果计算上有所不同。

GET grade2/_search
{
  "query": {
    "multi_match": {
      "query": "张一",
      "fields": ["name", "character"],
      "type": "best_fields"
    }
  }
}

上面的查询将使用 “best_fields” 类型在 name 和 character字段中搜索包含短语 “张一” 的文档。

4、query_string

        在 Elasticsearch 中,query_string 是一种查询方式,用于在文本字段上执行灵活且强大的搜索操作。query_string 查询支持使用 Lucene 查询语法进行高级搜索,可以通过在查询字符串中指定不同的搜索条件、操作符和逻辑关系来构建复杂的搜索查询。

4.1 简单的关键词匹配

GET grade2/_search
{
  "query": {
    "query_string": {
      "default_field": "character",
      "query": "乐观"
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

上面的查询将在 character字段中搜索包含关键词 “乐观” 的文档。

4.2 使用逻辑关系和操作符进行组合查询:

GET grade2/_search
{
  "query": {
    "query_string": {
      "default_field": "character",
      "query": "乐观 OR (赞扬 AND 优越)"
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

上面的查询将在 character字段中搜索包含关键词 “乐观” 或者 “赞扬 和 优越”的文档。

GET grade2/_search
{
  "query": {
    "query_string": {
      "default_field": "character",
      "query": "乐观 OR (name:刘一 AND age:25 AND 优越)"
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

        上面的查询将在 character字段中搜索包含关键词 “乐观” 或者 name字段为 “刘一” 且 age字段为”25″ 且 character字段为 “优越” 的文档。

4.3 模糊搜索和通配符搜索

GET account_info/_search
{
  "query": {
    "query_string": {
      "default_field": "email",
      "query": "qq?com~"
    }
  }
}
GET account_info/_search
{
  "query": {
    "query_string": {
      "default_field": "email",
      "query": "qqcom~"
    }
  }
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

        上面的查询将在 email字段中搜索类似于 “qq?com” 的词,其中 “?” 表示单个字符的通配符, “~” 表示模糊搜索,”*” 表示多个字符的通配符。

GET account_info/_search
{
  "query": {
    "query_string": {
      "default_field": "email",
      "query": "qqcom~",
      "fuzziness": 1
    }
  }
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

        可以指定模糊搜索的最大编辑距离。上面的查询将在文档中搜索与 “qqcom~” 关键词的拼写相似且最大编辑距离为 1的文档。

4.4 指定搜索字段和搜索条件

GET grade2/_search
{
  "query": {
    "query_string": {
      "fields": ["name", "age"],
      "default_operator": "AND", 
      "query": "name:刘一, age:26"
    }
  },
  "track_total_hits": true
}
GET grade2/_search
{
  "query": {
    "query_string": {
      "fields": ["name", "age"],
      "default_operator": "AND", 
      "query": "name:刘一 age:26"
    }
  },
  "track_total_hits": true
}
GET grade2/_search
{
  "query": {
    "query_string": {
      "fields": ["name", "age"],
      "default_operator": "AND", 
      "query": "name:刘一 AND age:26"
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

GET grade2/_search
{
  "query": {
    "query_string": {
      "fields": ["name", "age"],
      "default_operator": "AND", 
      "query": "name:刘一 AND age:[25 TO 26]"
    }
  },
  "track_total_hits": true
}

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

        上面的查询将在 name 和 age 字段中搜索包含关键词 “刘一” 并且年龄在 25 到 26 之间的文档,其中 fields 参数用于指定搜索字段,default_operator 参数用于指定默认的逻辑操作符。

        需要注意的是,query_string 查询可能存在安全风险,因为它允许直接执行用户输入的查询字符串,可能导致潜在的搜索注入攻击,因此在使用时需谨慎验证和过滤用户输入,以防止安全漏洞。同时,根据实际需求和场景,可以根据 Elasticsearch 的文档和查询语法进行更多的配置和优化。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/142714.html

(0)

相关推荐

  • VS Code 的常用快捷键和插件

    书读的越多而不加思考,你就会觉得你知道得很多;而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得很少。

    导读:本篇文章讲解 VS Code 的常用快捷键和插件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年3月4日
    00
  • mysql格式化数字format错误、cast、convert函数介绍

    导读:本篇文章讲解 mysql格式化数字format错误、cast、convert函数介绍,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端笔记 2023年2月21日
    00
  • 04_JavaScript的分支语句-三元运算符-逻辑运算符补充

    导读:本篇文章讲解 04_JavaScript的分支语句-三元运算符-逻辑运算符补充,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    后端笔记 2023年3月1日
    00
  • Flink CDC 同步mysql数据

    命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

    导读:本篇文章讲解 Flink CDC 同步mysql数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年5月14日
    00
  • Maven项目报错:“ SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”的解决方案

    人生之路不会是一帆风顺的,我们会遇上顺境,也会遇上逆境,在所有成功路上折磨你的,背后都隐藏着激励你奋发向上的动机,人生没有如果,只有后果与结果,成熟,就是用微笑来面对一切小事。

    导读:本篇文章讲解 Maven项目报错:“ SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”的解决方案,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年3月8日
    00
  • Vue.js学习详细课程系列–共32节(1 / 6)

    有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

    导读:本篇文章讲解 Vue.js学习详细课程系列–共32节(1 / 6),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年4月20日
    00
  • MyBatis实践之结果映射

        一、 概述     二、结果映射     &nbsp…

    2023年3月16日
    00
  • 使用docker部署mongodb

    有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

    导读:本篇文章讲解 使用docker部署mongodb,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年4月18日
    00
  • vue打包部署到服务器(vue2项目,但架构为vue3架构,含有vue.config.js文件的试用此方法)

    追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

    导读:本篇文章讲解 vue打包部署到服务器(vue2项目,但架构为vue3架构,含有vue.config.js文件的试用此方法),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年4月6日
    00
  • Flink 状态一致性

    命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

    导读:本篇文章讲解 Flink 状态一致性,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    后端笔记 2023年5月14日
    00

发表回复

登录后才能评论