ElasticSearch查询语句用法

news/2024/7/7 6:36:35 标签: elasticsearch, 大数据, 搜索引擎

查询用法包括:match、match_phrase、multi_match、query_string、term

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_phrase

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

2.1 简单用法

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

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

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

2.2 可调节因子

match_phrase默认要求完全匹配上query的短语,完全匹配可能比较严,我们会希望有个可调节因子,少匹配一个也满足,那就需要用到slop

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

3、multi_match

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

3.1 简单用法

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

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

上面的查询将在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字段中搜索包含短语 "张一" 的文档。

(1)best_fields:我们希望完全匹配的文档占的评分比较高,multi_match默认是best_fields

{
  "query": {
    "multi_match": {
      "query": "王阳明",
      "fields": [
        "title",
        "yearAlias"
      ],
      "minimum_should_match": "70%"
    }
  }
}

(2)most_fields:我们希望越多字段匹配的文档评分越高

{
  "query": {
    "multi_match": {
      "query": "王阳明",
      "type": "most_fields",
      "fields": [
        "title",
        "keywords"
      ]
    }
  }
}

(3)cross_fields:我们希望这个词条词汇是分配到不同字段中的

{
  "query": {
    "multi_match": {
      "query": "王阳明",
      "fields": [
        "title",
        "keywords"
      ],
      "type": "cross_fields"
    }
  },
  "highlight": {
    "fields": {
      "title": {
        "pre_tags": ["<a>" ],
        "post_tags": [ "</a>"]
      },
      "keywords": {
        "pre_tags": ["<b>" ],
        "post_tags": ["</b>" ]
      }
    }
  }
}

4、query_string

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

4.1 简单的关键词匹配

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

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

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

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

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

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

上面的查询将在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~"
    }
  }
}

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

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

可以指定模糊搜索的最大编辑距离。上面的查询将在文档中搜索与"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:刘一 AND age:[25 TO 26]"
    }
  },
  "track_total_hits": true
}

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

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

5、term精确值查找

{
  "query": {
    "term": {
      "title": "王阳明"
    }
  }
}

完全匹配,不进行分词词分析,文档中必须包含整个搜索的词汇。

但是term和terms是 必须包含(must contain) 操作,而不是必须精确相等(must equal exactly)。比如当查询"jack"时,[jack]和[jack,jone]两条数据都会被找到。


http://www.niftyadmin.cn/n/5367120.html

相关文章

【软件使用】【edge】如何让edge的某个网页作为应用安装

【背景】 有些常用网页希望用双击快捷方式的形式打开更加效率&#xff0c;我的浏览器主要是edge&#xff0c;研究了两种方法来实现这个需求。 【Edge自带方法】 点击Edge的右上角三点水-》应用-》将此站点作为应用安装。 点击安装&#xff0c;可以选择是否加到开始屏幕等。 …

【Git】合并多次commit提交

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、git rebase合并二、git reset合并 前言 在开发阶段&#xff0c;由于我们会频繁的修改代码&#xff0c;会存在多次提交同一个修改&am…

寒假作业2月5号

第四章 堆与拷贝构造函数 一 、程序阅读题 1、给出下面程序输出结果。 #include <iostream.h> class example {int a; public: example(int b5){ab;} void print(){aa1;cout <<a<<"";} void print()const {cout<<a<<endl;} …

Stable Diffusion 模型下载:RealCartoon3D - V14

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 RealCartoon3D 是一个动漫卡通混合现实风格的模型,具有真实卡通的 3D 效果,当前更新到 V14 版本。 RealCartoon3D 是我上传的第一个模型。我仍在学习这些东西,但…

双面板设计的一套经验规则-笔记

过大的分布电感导致信号地干扰也就是地弹(专业名词) 还有就是输出瞬态电流导致的地弹 图中可以看到最高 0.5V 的信号地干扰&#xff0c;这只是单一块开发板的测试结果。如果接上外围电路&#xff0c;甚至面包板电路可以想象噪声水平可能会更高。 双面电路板 经验规则 下面来…

眸思MouSi:“听见世界” — 用多模态大模型点亮盲人生活

文章目录 1. Introduction1.1 APP细节展示2. Demo2.1 论文链接2.2 联系方式3. Experiment3.1 多专家的结合是否有效?3.2 如何更好的将多专家整合在一起?Reference让盲人听见世界,复旦眸思大模型打破视觉界限,用科技点亮新生活 1. Introduction 在这个世界上,视力是探索万…

蓝桥杯(Web大学组)2023省赛真题3:收集帛书碎片

需要实现&#xff1a; 1.将二维数组转为一维数组&#xff1b; 2.数组去重 一、将二维数组转为一维数组&#xff1a; 二、数组去重&#xff1a; function collectPuzzle(...puzzles) {// console.log(puzzles);// console.log(...puzzles);// TODO:在这里写入具体的实现逻辑/…

设计模式(结构型模式)桥接模式

目录 一、简介二、桥接模式2.1、手机品牌接口2.2、手机功能接口2.3、抽象部分2.4、具体抽象部分2.5、使用 三、优点和缺点 一、简介 桥接模式&#xff08;Bridge Pattern&#xff09; 是一种结构型设计模式&#xff0c;用于将抽象部分与它的实现部分分离&#xff0c;使它们可以…