elasticsearch 查询 term和match

一.match 查询

1.match 之 match (按条件查询)

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}

2.match 之 match_all (查询全部)

GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  }
}

#相当于
GET zhifou/doc/_search  也是查询全部

3.match 之 match_phrase(短语查询)

首先创建一些示例:

PUT t1/doc/1
{
  "title": "中国是世界上人口最多的国家"
}
PUT t1/doc/2
{
  "title": "美国是世界上军事实力最强大的国家"
}
PUT t1/doc/3
{
  "title": "北京是中国的首都"
}

需求1: 查询关于中国的字段(只希望返回中国相关的文档)

1.按照match查询  会出现三个结果    因为ES在内部对文档做分词的时候,对中文是一个字一个字分的,所以搜中国,就是中 和  国 都符合条件

2.如果要中文分词需要下中文分词插件,现在的解决办法就是 采用 短语查询  match_phrase

GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中国"
      }
    }
  }
}

需求2: 搜索类似于正则的 中国.*?世界 的文档

用slop 参数   表示  中国  世界 这两个词组之间 隔了2个词

GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中国世界",
        "slop": 2
      }
    }
  }
}

4.match 之 match_phrase_prefix(最左前缀查询)

准备数据:

PUT t3/doc/1
{
  "title": "maggie",
  "desc": "beautiful girl you are beautiful so"
}
PUT t3/doc/2
{
  "title": "sun and beach",
  "desc": "I like basking on the beach"
}

需求: 要查询desc 中 有 bea 的文档

GET t3/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": "bea"
    }
  }
}

注意: 有时会和max_expanions搭配使用

5.match 之 multi_match(多字段查询) 

准备数据:

PUT t3/doc/1
{
  "title": "maggie is beautiful girl",
  "desc": "beautiful girl you are beautiful so"
}
PUT t3/doc/2
{
  "title": "beautiful beach",
  "desc": "I like basking on the beach,and you? beautiful girl"
}

需求:我们要查询 多个字段中含有同一个关键字的文档

GET t3/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "beautiful"
          }
        },
        {
          "match": {
            "desc": "beautiful"
          }
        }
      ]
    }
  }
}

如果字段很多的情况下  我们需要写非常多的 match

因此  我们用到了 multi_match 与上述查询结果一致

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "beautiful",
      "fields": ["title", "desc"]
    }
  }
}

除此之外,multi_match 甚至可以当作 match_phrase  和 match_phrase_prefix 使用,只需要指定type类型即可.

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "gi",
      "fields": ["title"],
      "type": "phrase_prefix"
    }
  }
}
GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "girl",
      "fields": ["title"],
      "type": "phrase"
    }
  }
}

小结

  1.match:返回所有匹配的分词

  2. match_all: 查询全部

  3.match_phrase: 短语查询,在match的基础上进一步查询词组,可以指定slop分词间隔

  4.match_phrase_prefix:前缀查询,根据短语中最后一个词组做前缀匹配,可以用于搜索提示,但注意和max_expanions 搭配。 其实默认是50.

  5.multi_match:多字段查询,使用相当灵活,可以完成match_phrase 和 match_phrase_prefix的工作

6.term查询 (精确查询)

默认情况下, ES 在对文档分析期间(将文档分词后保存到倒排索引中),会对文档进行分词,比如默认的标准分析器会对文档进行:

  1.删除大多数标点符号

  2.将文档分解为带个词条,我们称为token

  3.将token 转为 小写

term 查询区分大小写 不会将 搜索字段值 转成小写

因此, 不要使用 term 对类型是text的字段进行查询

如果想要查询多个精准值 使用terms

GET w10/doc/_search
{
  "query": {
    "terms": {
      "t1": ["beautiful", "sexy"]
    }
  }
}

原文地址:https://www.cnblogs.com/s686zhou/p/12253027.html

时间: 2024-10-11 06:38:23

elasticsearch 查询 term和match的相关文章

Elasticsearch --- 4. term与match ,修改器,建议器

一.term与match 1.区别 term查询查找包含文档精确的倒排索引指定的词条.也就是精确查找(没经过分词). term和match的区别是: match是经过analyer的,也就是说,文档首先被分析器给处理了.根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配. term则不经过分词,它是直接去倒排索引中查找了精确的值了. 建立数据结构 PUT w1 { "mappings": { "doc": { "properties&quo

ES查询-term VS match (转)

原文地址:https://blog.csdn.net/sxf_123456/article/details/78845437 elasticsearch 中term与match区别 term是精确查询 match是模糊查询 term查询 term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个.比如说我们要找标题为北京奥运的所有文档 $curl -XGET http://localhost:9200/index/doc/_search?pr

(转)Elasticsearch查询规则------match和term

es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询全部员工 GET /megacorp/employee/_search?q=last_name:Smith //查询last_name为Smith的员工 另外一种是通过DSL语句来进行查询,被称为DSL查询(Query DSL),DSL是Elasticsearch提供的一种丰富且灵活的查询语言,该语

ElasticSearch查询 第四篇:匹配查询(Match)

匹配(Match)查询属于全文(Fulltext)查询,不同于词条查询,ElasticSearch引擎在处理全文搜索时,首先分析(analyze)查询字符串,然后根据分词构建查询,最终返回查询结果.匹配查询共有三种类型,分别是布尔(boolean).短语(phrase)和短语前缀(phrase_prefix),默认的匹配查询是布尔类型,这意味着,ElasticSearch引擎首先分析查询字符串,根据分析器对其进行分词,例如,对于以下match查询: "query":{ "ma

Func<T,T>应用之Elasticsearch查询语句构造器的开发

前言 之前项目中做Elasticsearch相关开发的时候,虽然借助了第三方的组件PlainElastic.Net,但是由于当时不熟悉用法,而选择了自己拼接查询语句.例如: string queryGroup = "{\"query\": {\"match\": { \"roomid\": \"FRIEND_12686_10035\" }}}"; //关键字查询 string queryKeyWord =

Elasticsearch入门教程(五):Elasticsearch查询(一)

原文:Elasticsearch入门教程(五):Elasticsearch查询(一) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79228852 // 准备数据 PUT /shop/goods/1 { "name": "2017新款女装冬季外套ulzzang棉袄中长款棉衣韩版百搭棉服面包服", &quo

Elasticsearch入门教程(六):Elasticsearch查询(二)

原文:Elasticsearch入门教程(六):Elasticsearch查询(二) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79237950 地理坐标点geo-point 地理坐标点:是指地球表面可以用经纬度描述的一个点. 地理坐标点可以用来计算两个坐标间的距离,还可以判断一个坐标是否在一个区域中,或在聚合中. 地理坐标点不能被

elasticsearch 查询 query

对于 类型是 text的字段,并且分析器指明是ik_max_word的会建立倒排索引 查询的分类: match查询:  会自动转换大小写,会分词, term查询: 不会转换和分词,只能值匹配 terms查询: 可以给字段值传入数组, 这里有没有分词呢??????????应该和term一样的只会值匹配吧,要不为啥叫terms,待验证 控制查询的数量,  from,和size属性指明,可以用来分页 match_all: 搜索索引下的所有type match_phrase: 满足分词后的所有词, sl

Elasticsearch查询match、term和bool区别

es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL).由于DSL查询更为直观也更为简易,所以大都使用这种方式.DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式.这里有一个地方注意的是官方文档里面给的例子的json结构只是一部分,并不是可以直接黏贴复制进去使用的.一般要在外面加个query为key的机构. match最简单的一个match例子: 查询和"我的宝马多少马力"这个