Es学习第七课, term、terms、match等基本查询语法

Stella981
• 阅读 1344

term、terms查询

term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword、numeric、date等明确值的

term:查询某个字段里含有某个关键词的文档

GET /customer/doc/_search/
{
  "query": {
    "term": {
      "title":   "blog"
    }
  }
}

terms:查询某个字段里含有多个关键词的文档

GET /customer/doc/_search/
{
  "query": {
    "terms": {
      "title":  [ "blog","first"]
    }
  }
}

match查询

match query 知道分词器的存在,会对field进行分词操作,然后再查询

GET /customer/doc/_search/
{
  "query": {
    "match": {
      "title":  "my ss"   #它和term区别可以理解为term是精确查询,这边match模糊查询;match会对my ss分词为两个单词,然后term对认为这是一个单词
    }
  }
}

match_all:查询所有文档

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

multi_match:可以指定多个字段

GET /customer/doc/_search/
{
  "query": {
    "multi_match": {
      "query" : "blog",
      "fields":  ["name","title"]   #只要里面一个字段包含值 blog 既可以
    }
  }
}

match_phrase:短语匹配查询

ES引擎首先分析查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变

_source:当我们希望返回结果只是一部分字段时,可以加上_source

GET /customer/doc/_search/
{
  "_source":["title"],  #只返回title字段
  "query": {
    "match_all": {}
  }
}

排序

使用sort实现排序(类似sql):desc 降序,asc升序

fuzzy实现模糊查询

value:查询的关键字

boost:查询的权值,默认值是1.0

min_similarity:设置匹配的最小相似度,默认值0.5,对于字符串,取值0-1(包括0和1);对于数值,取值可能大于1;对于日期取值为1d,1m等,1d等于1天

prefix_length:指明区分词项的共同前缀长度,默认是0

GET /customer/doc/_search/
{
   
  "query": {
    "fuzzy": {
      "name": {
        "value": "blg"
      }
    }
  } 
}

#返回:
{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.19178805,
    "hits": [
      {
        "_index": "customer",
        "_type": "doc",
        "_id": "1",
        "_score": 0.19178805,
        "_source": {
          "name": "blog",
          "tags": [
            "testing"
          ],
          "title": "i am a doc"
        }
      }
    ]
  }
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Elasticsearch Query DSL之Term level queries
简介term\_level查询操作的是存储在反向索引(倒排索引)中的准确词根,这些查询通常用于结构化数据,如数字、日期和枚举,而不是全文字段,无需进行分析(分词),termlevel查询类似于关系型数据库的(where条件过滤)。其查询模式如下:termquery查找包含指定字段中精确匹配查询字符串的文档。
Stella981 Stella981
3年前
ElasticSearch常用的查询过滤语句
这次主要讲常见的过滤查询语句!term过滤term主要用于精确匹配哪些值,比如数字,日期,布尔值或not\_analyzed的字符串(未经分析的文本数据类型):{"term":{"age":26}}{"term":{"date":"20140901"}}
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
ElasticSearch基本查询
词条查询 这是一个简单查询。它仅匹配给定字段中包含该词条的稳定,且是2未经分析的确切的词条。 { “query”:{ “term”:{ “title”:”crime” } } } 多词条查询 匹配内容中包含某些词条的文档。 { “query”:{ “terms::{ “
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这