Elasticsearch文档查询详解

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

match查询

单条件匹配查询

GET /索引名/类型名/_search
{
  "query": {
    "match": {
      "文档字段名": "文档字段值"
    }
  }
}
GET yzq/user/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  }
}

如果文档中被匹配的字段包含中文则会进行模糊搜索,如果只有英文则会精确搜索,举例说明:

字段名 文档1 文档2 文档3
name java java123 java张三

如果name匹配java的话可以匹配到java、java张三但是匹配不到java123。

单字段多条件匹配查询

GET yzq/user/_search
{
  "query": {
    "match": {
      "文档字段名": "字段值1 字段值2"(多个字段值以空格分开)
    }
  }
}

查询索引中tags中包含男、技术关键词的文档,会检索出包含男关键词、技术关键词、以及两个都包含的文档,包含越多的查询排名越靠前。

GET yzq/user/_search
{
  "query": {
    "match": {
      "tags": "男 技术"
    }
  }
}

通常tags的值像是这样:“tags”: [“技术宅”,“温暖”,“直男”]

term查询

GET /索引名/类型名/_search
{
  "query": {
    "term": {
      "文档字段名": "文档字段值"
    }
  }
}
GET yzq/user/_search
{
  "query": {
    "term": {
      "name": "爪哇 java"
    }
  }
}

term和match关键字的区别在于是否将查询的字段值做拆分,以上面的GET查询为例。

  • 如果使用term则name字段不会被分词器拆分,因此本次查询会根据“爪哇 java”这个词到倒排索引中进行匹配;
  • 如果使用match则name字段会被分词器拆分为“爪哇”和“java”再拿这两个单次到倒排索引中进行匹配(或的关系,只要有一个匹配成就算成功)

text和keyword是指在建立索引时声明的某个字段的类型。

  • 如果是text则新插入文档时就会对该字段进行分词处理后,把分好的词写入倒排索引中,以上面的GET为例会把“爪哇”和“java”这两个词写入倒排索引
  • 如果是keyword则新插入文档时不会对该字段进行分析处理,直接把单次完整的写入倒排索引中,以上面的GET为例则只会把“爪哇 java”这个完整的词写入倒排索引

通常情况下是如下搭配:

  • match + text (如果是term + text,使用term查询时,查询条件不会进行分词。但是text类型的数据,在倒排索引中实际存储的是分词的数据。term条件区分大小写,而text数据经过默认的standard analyzer分词器分词,大写字母全部转为了小写字母,并存入了倒排索引以供搜索,所以这里需要注意大小写匹配的问题)
  • term + keyword(如果是match + keyword则等效term)

查询附加操作

筛选字段

如果不想要文档中的所有字段值的话可以通过_source字段来筛选出想要的值。附上格式和例子:

GET /索引名/类型名/_search
{
  "query": {
    "match": {
      "文档字段名": "文档字段值"
    }
  }
  "_source": ["字段1", "字段2", ...]
}
GET yzq/user/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  }, 
  "_source": ["name", "desc"]
}

排序

GET /索引名/类型名/_search
{
  "query": {
    "match": {
      "文档字段名": "文档字段值"
    }
  }
  "sort": [
  	{
		"文档字段名": {
			"order": "asc"/"desc"(二选一)
		}
	}
  ]
}
GET yzq/user/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  }, 
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

limit操作

GET /索引名/类型名/_search
{
  "query": {
    "match": {
      "文档字段名": "文档字段值"
    }
  }
  "sort": [
  	{
		"文档字段名": {
			"order": "asc"/"desc"(二选一)
		}
	}
  ]
  "from": 从哪开始(默认第一条文档下标为0),
  "size": 截取多少条
}
GET yzq/user/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  }, 
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

多条件查询

这种查询支持多个条件同时查询,这些条件的关系可以是AND(must)和OR(should)

AND查询

GET yzq/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "文档字段名1": "文档字段值1"
          }
        },
        {
          "match": {
            "文档字段名2": 文档字段值2
          }
        }
      ]
    }
  }
}

查询索引中name匹配java而且age为23的文档

GET yzq/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "java"
          }
        },
        {
          "match": {
            "age": 23
          }
        }
      ]
    }
  }
}

OR查询

GET yzq/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "文档字段名1": "文档字段值1"
          }
        },
        {
          "match": {
            "文档字段名2": 文档字段值2
          }
        }
      ]
    }
  }
}

查询索引中name匹配java或者age为23的文档

GET yzq/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "java"
          }
        },
        {
          "match": {
            "age": 23
          }
        }
      ]
    }
  }
}

不等于查询

关键字must_not

GET yzq/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "文档字段名": 文档字段值
          }
        }
      ]
    }
  }
}

查询索引中age不等于3的文档

GET yzq/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": 3
          }
        }
      ]
    }
  }
}

范围查询

GET yzq/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "java"
          }
        }
      ],
      "filter": {
        "range": {
          "文档字段名": {
            "gte": 值大于等于多少,也可以是大于多少(gt),
            "lte": 值小于等于多少,也可以是小于多少(lt)
          }
        }
      }
    }
  }
}

查询索引中name匹配java的文档中并且age值小于10的所有文档

GET yzq/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "java"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "lt": 10
          }
        }
      }
    }
  }

查询索引中age大于等于10且小于等于30的所有文档

GET yzq/user/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 30
      }
    }
  }
}

高亮查询

  • 默认高亮显示的标签是em,也可以日通过pre_tags和post_tags改成自己想要的标签,遵循html页面的写法。
GET yzq/user/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  },
  "highlight": {
    "pre_tags": "想要定义的前缀", 
    "pre_tags": "想要定义的后缀",
    "fields": {
      "需要匹配的字段名":{} 
    }
  }
}

查询索引中name匹配java的所有文档,并高亮显示查询的name字段。文章来源地址https://www.toymoban.com/news/detail-481790.html

GET yzq/user/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>", 
    "post_tags": "</p>",
    "fields": {
      "需要匹配的字段名":{} 
    }
  }
}

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

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

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

相关文章

  • Excel小技巧,使用函数(INDEX+MATCH)快速进行条件查询

    目录 Excel小技巧,使用函数(INDEX+MATCH)快速进行条件查询 1、例如:快速查找下图右边同学的总分  2、在条件查询区域,总分单元格中输入函数【=INDEX(E:E,MATCH(H2,A:A,0))】即可  3、INDEX(E:E  函数为查找结果所在列,MATCH(H2,A:A,0)函数中H2为查找值,A:A为查找所在列,0为精确匹配

    2024年02月10日
    浏览(72)
  • elasticsearch term & match 查询

    运行结果: 查询结果: match_all 的值为空,表示没有查询条件,那就是查询全部。就像 select * from table_name 一样。 查询结果: match 查询时散列映射,包含了我们希望搜索的字段和字符串,即只要文档中有我们希望的那个,但也会带来一些问题。 es 会将文档中的内容进

    2023年04月19日
    浏览(56)
  • Elasticsearch:了解和使用 match 查询

    Match query 是针对多个用例的最常见和最强大的查询。 它是一个全文搜索查询,返回符合指定条件的文档。 match query 可以即兴使用来查询多个选项。在我之前的文章 “开始使用 Elasticsearch (2)” 对它有很多的描述。 让我们首先看看这个片段显示的 match query 的格式: 正如你

    2024年02月07日
    浏览(49)
  • Elasticsearch 中的 term、terms 和 match 查询

    目录 term 查询 terms 查询 match 查询 注意事项 结论    Elasticsearch 提供了多种查询类型,用于不同的搜索需求。 term 、 terms 和 match 是其中最常用的一些查询类型。下面分别介绍每种查询类型的用法和特点。   term 查询用于精确值匹配。它通常用于(keyword)类型的字段,

    2024年04月14日
    浏览(52)
  • Elasticsearch:Multi-match (multi_match) 及 Disjunction max 查询

    多重匹配(multi_match)查询,顾名思义就是跨多个字段搜索查询。 例如,如果我们想在 title、synopsis 和 tags 三个字段中搜索 Java 一词,那么 multi_match query 就是答案。另外,很多开发者还不是很清楚 multi-match 及 disjunction max query 的区别和联系。在今天的文章中,我将详述这两个

    2024年02月05日
    浏览(47)
  • MongoDB【CRUD练习-条件查询-文档关系】

    这里会学习到一个数据类型: 数组 ,这里的语法和JavaScript十分相似。数组使用push来添加数据。 这里还会学到比较运算符:小于:lt ,等于:eq,大于: gt,小于等于: lte,大于等于: gte。和我们shell编程的比较运算符很像。 文档之间有三种: 一对一 夫妻 一对多/多对一

    2024年02月11日
    浏览(59)
  • ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

    略 1.1 不同字段权重         如果需要为不同字段设置不同权重,可以考虑使用 bool 查询的 should 子句来组合多个 match 查询,并为每个 match 查询设置不同的权重。         上面的查询将在 product_name 字段和 description 字段中搜索包含 \\\"apple\\\" 的文档,并为 product_name 字段设

    2024年02月10日
    浏览(43)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查询 match

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 数据准备 官方测试数据下载地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,数据量很大,我们自己构造数据吧。 2. m

    2023年04月08日
    浏览(52)
  • elasticsearch之多条件查询

    字段名:用于指定要搜索的字段名称。例如, message 字段。 值:用于指定要搜索的值。例如, error 。 运算符:用于指定如何比较字段和值之间的关系。例如, : 表示相等, 表示大于, 表示小于, = 表示大于等于, = 表示小于等于, != 表示不等于, AND 表示逻辑与, OR 表示

    2024年04月13日
    浏览(28)
  • ElasticSearch系列 - SpringBoot整合ES:多字段查询 multi_match

    1. 什么是 ElasticSearch 的 multi_match 查询? 有时用户需要在多个字段中查询,除了使用布尔查询封装多个match查询之外,可替代的方案是使用multi_match。可以在multi_match的query子句中组织数据匹配规则,并在fields子句中指定需要搜索的字段列表。 以下是一个示例multi-match查询

    2023年04月21日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包