栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticsearch的基础查询操作

elasticsearch的基础查询操作

目录

es的基础操作

1. 创建es_db索引,并将该索引的默认分词方法设置为ik_max_word2. 针对索引的基本操作3. 添加文档4. 查询文档的基础操作5. 根据多个文档id进行批量查询 DSL语言高级查询

1. 根据某一字段进行精确查询,term查询不会对字段进行分词查询,会采用精确匹配2. ik分词测试3. 根据备注信息模糊查询 match, match会根据该字段的分词器,进行分词查询4. 多字段模糊匹配查询与精准查询 multi_match5. 范围查询6. 分页、输出字段、排序综合查询7. Filter过滤器方式查询,它的查询不会计算相关性分值,也不会对结果进行排序, 因此效率会高一点,查询的结果可以被缓存8. 获取文档映射9. 根据文档ID批量获取10. 批量查询不同索引下,不同文档ID的数据11. 批量操作文档12. 不指定字段进行数据匹配查询query_string,含AND与OR条件(会进行分词模糊匹配所有字段的数据) 总结

1. match2. term3. match_phase4. query_string

es的基础操作 1. 创建es_db索引,并将该索引的默认分词方法设置为ik_max_word
PUT /es_db
{
  "settings": {
    "index": {
      "analysis.analyzer.default.type": "ik_max_word"
    }
  }
}
2. 针对索引的基本操作
GET /es_db
DELETe /es_db
3. 添加文档
PUT /es_db/_doc/1
{
  "name": "张三",
  "sex": 1,
  "age": 23,
  "address": "广州天河公园"
}
PUT /es_db/_doc/2
{
  "name": "张三",
  "sex": 0,
  "age": 43,
  "address": "广州天河棠下"
}
PUT /es_db/_doc/3
{
  "name": "李四",
  "sex": 0,
  "age": 18,
  "address": "深圳龙岗公园"
}
PUT /es_db/_doc/4
{
  "name": "李斯",
  "sex": 0,
  "age": 51,
  "address": "广州白云山"
}
PUT /es_db/_doc/4
{
  "name": "李斯",
  "sex": 0,
  "age": 52,
  "address": "广州白云山"
}
PUT /es_db/_doc/5
{
  "name": "广州人",
  "sex": 0,
  "age": 100,
  "address": "广州"
}
4. 查询文档的基础操作
GET /es_db/_doc/_search

GET /es_db/_doc/_search?q=age:52

GET /es_db/_doc/_search?q=age:<=20

GET /es_db/_doc/_search?q=age:>20

GET /es_db/_doc/_search?q=age[40 TO 50]

GET /es_db/_doc/_search?q=age[0 TO 150]&from=2&size=2

GET /es_db/_doc/_search?_source=name,age

GET /es_db/_doc/_search?_source=name,age&sort=age:desc
5. 根据多个文档id进行批量查询
GET /es_db/_doc/_mget
{
  "ids":["1", "2"]
}
DSL语言高级查询 1. 根据某一字段进行精确查询,term查询不会对字段进行分词查询,会采用精确匹配

类似SQL: select * from student where name = ‘张三’

POST /es_db/_doc/_search
{
  "query": {
    "term": {
      "name": "张三"
    }
  }
}
2. ik分词测试
POST _analyze
{
  "analyzer": "ik_max_word",
  "text": "广州公园"
}
3. 根据备注信息模糊查询 match, match会根据该字段的分词器,进行分词查询

类似于SQL: select * from user where (address like ‘%广州%’ or address like ‘%公园%’) limit 0, 5

POST /es_db/_doc/_search
{
  "from": 0,
  "size": 5,
  "query": {
    "match": {
      "address": "广州公园"
    }
  }
}
4. 多字段模糊匹配查询与精准查询 multi_match

类似于SQL: select * from student where name like ‘%广州%’ or address like ‘%广州%’

POST /es_db/_doc/_search
{
  "query": {
    "multi_match": {
      "query": "广州",
      "fields": ["name", "address"]
    }
  }
}
5. 范围查询

range:范围关键字gte:大于等于lte:小于等于gt:大于lt:小于

类似于SQL: select * from user where age between 20 and 30

POST /es_db/_doc/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 30
      }
    }
  }
}
6. 分页、输出字段、排序综合查询

类似SQL: select name, age, address from user where age between 10 and 50 order by age desc limit 0,5

POST /es_db/_doc/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 50 
      }
    }
  },
  "from": 0,
  "size": 5,
  "_source": ["name", "age", "address"],
  "sort": {
    "age": "desc"
    
  }
}
7. Filter过滤器方式查询,它的查询不会计算相关性分值,也不会对结果进行排序, 因此效率会高一点,查询的结果可以被缓存
POST /es_db/_doc/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "age": 23
        }
      }
    }
  }
}
8. 获取文档映射
GET /es_db/_mapping
9. 根据文档ID批量获取
GET /es_db/_mget
{
  "docs": [
    {
      "_type": "_doc",
      "_id": 1
    },
    {
      "_type": "_doc",
      "_id": 4
    }
    ]
}

GET /es_db/_doc/_mget
{
    "docs": [
    {
      "_id": 1
    },
    {
      "_id": 4
    }
    ]
}
10. 批量查询不同索引下,不同文档ID的数据
GET _mget
{
  "docs": [
    {
      "_index": "es_db",
      "_type": "_doc",
      "_id": 4
    },
    {
      "_index": "es_db_second",
      "_type": "_doc",
      "_id": 1
    }
    ]
}
11. 批量操作文档

批量对文档进行写操作是通过_bulk的API来实现

请求方式:POST

请求地址:_bulk

请求参数:通过_bulk操作文档,一般至少有两行参数(或偶数行参数)

第一行参数为指定操作的类型及操作的对象

(index,type和id)

第二行参数才是操作的数据

参数设置如下:

{"actionName":{"_index":"indexName", "_type":"typeName","_id":"id"}} 2 {"field1":"value1", "field2":"value2"}

actionName:表示操作类型,主要有create,index,delete和update

批量创建文档create

POST _bulk
{"create": {"_index": "es_db", "_type": "_doc", "_id": 6}}
{"name": "曹操", "sex": 0, "age": 30, "address": "许昌"}
{"create": {"_index": "es_db", "_type": "_doc", "_id": 7}}
{"name": "曹丕", "sex": 0, "age": 20, "address": "许昌"}

如果原文档不存在,则是创建;如果原文档存在,则是替换(全量修改原文档)

POST _bulk
{"index": {"_index": "es_db", "_type": "_doc", "_id": 8}}
{"name": "曹植", "sex": 0, "age": 30, "address": "许昌"}
{"index": {"_index": "es_db", "_type": "_doc", "_id": 7}}
{"name": "曹丕", "sex": 0, "age": 20}

批量删除delete

POST _bulk
{"delete": {"_index": "es_db", "_type": "_doc", "_id": 8}}
{"delete": {"_index": "es_db_second", "_type": "_doc", "_id": 1}}
12. 不指定字段进行数据匹配查询query_string,含AND与OR条件(会进行分词模糊匹配所有字段的数据)
POST /es_db/_search
{
  "query": {
    "query_string": {
      "query": "广州 OR 曹丕"
    }
  }
}
总结 1. match

模糊匹配,需要指定字段名,会对查询条件进行分词;也就是说match是一个部分匹配的模糊查询。查询条件相对来说比较宽松。

2. term

term是精确查询,不会对查询条件进行分词操作;

该查询方式和match在查询单个词,无法进行分词的信息时,是等价的,查询结果一样;

3. match_phase

会对查询条件进行分词操作,但是查询的结果是需要包含查询条件所有的分词,而且顺序要是一样;

例:查询“hello world”,则查询结果中必须包含“hello”和“world”,且hello要在world之前,且是连续的,“world hello”不满足,“hello that world”也不满足;

4. query_string

与match类似,但是match需要指定字段名,query_string是在所有字段中搜索,范围更广泛。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/728965.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号