elasticsearch学习——初识es与查询语法

一、相关概念

  • es是什么?
    Elasticsearch 是基于JSON的分布式搜索和分析引擎,是利用倒排索引实现的全文索引。
  • es的地位
    es在elk生态圈中处于核心地位,是开源大规模基于倒排索引的全文搜索分析引擎,他几乎能实时的支持存储搜索分析。
  • es的优势
    1)横向可扩展性:增加服务器可直接配置在集群中
    2)分片机制提供更好的分布性:分而治之的方式来提升处理效率
    3)高可用:提供复制(replica)机制
    4)实时性: 通过将磁盘上的文件放入文件缓存系统来提高查询速度
  • es的检索方式
    1)使用URL参数形式检索
    2)使用DSL方式(request body)方式检索
  • es对比数据库
es 索引 类型 文档 字段
数据库 数据库

二、查询语法

关键字 描述
term/terms 分组查询
range 范围内查询
exists 查看某个字段是否存在
ids 根据id查询
match/match_all/match_phrase 匹配查询
from 分页查询
size 指定大小
sort 排序
_source 制定检索结果输出的字段
script_fields 允许我们通过一个脚本计算document中不存在的值
aggs 基于搜索查询,可以嵌套聚合来组合复杂的需求
prefix 指定前缀查询
wildcard 通配符查询
fuzzy 模糊查询
multi_match 多字段查询
query_String 多字段分词查询

一)条件查询

term

查询时判断某个document是否包含某个具体的值,不会对被查询的值进行分词查询

terms

单个字段属于某个值数组内的值

GET /moe_db/_doc/_search
{
  "query": {
    "terms": {
      "name": [
        "admin",
        "moe"
      ]
    }
  }
}
range

字段属于某个范围内的值

GET /moe_db/_doc/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 18,# gte: >=, gt: >
        "lte": 30
      }
    }
  }
}
exists

查看某个字段是否存在

GET /moe_db/_doc/_search
{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}
ids
GET /moe_db/_doc/_search
{
  "query": {
    "ids": {
      "values": [
        1,
        2,
        6
      ]
    }
  }
}
match

匹配查询,将被查询值进行分词,然后用评分机制(TF/IDF)进行打分

match_all

全量查询,会返回当前索引下全部数据

match_phrase

查询指定段落,完全匹配,不支持分词

{
    "query":{
        "match_phrase":{
            "category":"小米"
        }
    },
    "hightlight":{//将字段文本高亮展示
        "fields":{
            "category":{}
        }
    }
}
from
  • 以一定的偏移量来查看我们检索的结果,缺省从检索的第一条数据开始显示
  • 假如查询第二页内容:(2-1)*每页条数——from:(页码-1)*每页条数
size

指定检索结果中输出的数据条数,缺省为10条

sort

允许我们将检索的结果以指定的字段进行排序显示

"sort":{
    "price":{
        "order":"desc"//asc和数据库差不多
    }
}
_source

制定检索结果输出的字段

"_source":["title",...]//输入想看到的字段即可
script_fields

该类型允许我们通过一个脚本计算document中不存在的值,比如我们需要计算install/click得到cti之类的

"script_fields": {
    "FIELD": {# 指定脚本计算之后值得名称
      "script": {# 脚本内的运算
      }
    }
  }
aggs

基于搜索查询,可以嵌套聚合来组合复杂的需求

"aggs": {//聚合操作
    "NAME": {# 指定结果的名称
      "AGG_TYPE": {# 指定具体的聚合方法,
        TODO: # 聚合体内制定具体的聚合字段
      }
    }
    TODO: # 该处可以嵌套聚合
  }

AGG_TYPE:terms(分组);avg(平均值)

prefix

指定前缀查询

{
    "query":{
        "prefix":{
            "name":{
                "value":"王小"
            }
        }
    }
}
wildcard

通配符查询

{
    "query":{
        "wildcard":{
            "name":{
                "value":"王小*"//"*"代表n个字符  "?"代表1个字符
                //"value":"王?"-》得到结果为王x的值
            }
        }
    }
}
fuzzy

模糊查询含有指定某关键词的文档
注意:允许出现的错误必须在0-2之间

{
    "query":{
        "fuzzy":{
            "content":"什么"
        }
    }
}

目标文本含有“spring”输入“spr8ng”“sp88ng”都可匹配到 但输入“sp888g”就无法匹配

multi_match

多字段查询(也会对查询文本进行分词来查询)

{
    "query":{
        "multi_match":{
            "query":"中国""fields":["name","content"]//写需要参与检索的字段
        }
    }
}
query_String

多字段分词查询(与multi_match相比 这个可以在搜索时指定分词器)

{
    "query":{
        "query_String":{
            "query":"中国声音""analyzer":"simple"
            "fields":["name","content"]
        }
    }
}

“这是一个框架”通过不同分词器的结果
分词器:simple——》“这是一个框架” ; standard——》“这”“是”“一”“个”“框”“架”

二)多条件查询

将多个单条件查询组合起来就是多条件查询

bool

把多个条件组合成and、or、not的关系

must

各个条件都必须满足,即各个条件是and的关系

POST /moe_db/_doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": "admin"
          }
        },
        {
          "term": {
            "age": 30
          }
        }
      ]
    }
  }
}
should

各个条件有一个满足即可,即各个条件为or关系

POST /moe_db/_doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "name": "admin"
          }
        },
        {
          "term": {
            "age": 30
          }
        }
      ]
    }
  }
}
must_not

不满足所有条件,即各个条件为not关系

POST /moe_db/_doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "name": "xxoo"
          }
        }
      ]
    }
  }
}
filter

过滤

POST /moe_db/_doc/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "name": "admin"
          }
        }
      ]
    }
  }
}

加油鸭

你可能感兴趣的:(日常小点总结,elasticsearch)