ElaticSearch中的常见查询(所有、分词、词条、模糊、范围、布尔查询)

有如下几种

  1. match_all 查询所有
  2. match 分词查询
  3. term 词条查询
  4. fuzzy 模糊查询
  5. range 范围查询

查询所有(match_all)

GET my_index/_search
{
  "query": {
    "match_all": {}
  }
}

// 也可以省略成如下写法
GET my_index/_search
  • query:代表查询对象
  • match_all:代表查询所有文档

效果

 

分词查询(match)

match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间默认是or的关系

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "小米电视"
    }
  }
}
  • title:字段名
  • 小米电视:搜索条件

 

如果需要更精确的查找,希望多个词条之间的关系是and的关系,可以这样写

GET my_index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "小米电视",
        "operator": "and"
      }
    }
  }
}

这样就只有同时包含小米和电视的词条才会被搜索到

 

 

 

 

 

词条匹配 (term)

term词条查询,查询的是一个词条,不会被分词,可以是keyword类型的字符串、数值、或者text类型字段中分词得到的某个词条

GET my_index/_search
{
  "query": {
    "term": {
      "price": 2999.00
    }
  }
}

 

 

模糊查询(fuzzy)

一个新的概念,叫做编辑距离,一个词条变为另一个词条需要修改的次数,比如,facebool要修改为facebook需要做的是把l修改为k,一次即可,编辑距离就是1

模糊查询允许用户查询内容与实际内容存在偏差,但是编辑距离不能超过2

GET my_index/_search
{
  "query": {
    "fuzzy": {
      "title": {
        "value": "小米",
        "fuzziness": 1
      }
    }
  }
}

可以看到,结果中包含小米、大米都被搜索到了

 

 

范围查询(range)

range查询找出那些落在指定区间内的数字或者时间

  • gt 大于
  • gte 大于等于
  • lt 小于
  • lte 小于等于
GET my_index/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 2000,
        "lt": 3000
      }
    }
  }
}

 

 布尔查询(bool)

bool把各种其他查询通过must(与)、must_not(非)、should(或)的方式进行组合

GET my_index/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "title": "小米"
        }
      },
      "must_not": {
        "match": {
          "title": "电视"
        }
      }
    }
  }
}

要小米,但是不要电视

 

posted @ 2022-11-21 22:31  徐林俊  阅读(213)  评论(0编辑  收藏  举报