环境

  • elasticsearch服务端-默认端口号-9100
  • elasticsearch-head-master(前端项目需要nodejs)客户端-默认端口号-9200
  • es可视化平台-默认端口号-5601

    数据库结构

  • 结构化数据:MySQL,字段存储,不易添加字段

  • 非结构化数据:redis,MongoDB,以KV形式存储
  • 半结构化数据:HTML,xml

    概念

    Elasticsearch是开源高扩展的分布式全文搜索引擎,通过全文检索的方式,生成一个倒排索引的索引库
    在搜索词语的时候,可以直接找到相关出现的文档位置,无需去其他文档中搜索

  • 正排索引:通过id、索引字段寻找内容数据

  • 倒排索引:通过内容数据寻找文档编号或id

    类型

  1. index 索引
  2. Field 字段 {"name": "zhangsan"}
  3. mapping 映射 {"name":"zhangsan", "age":18}
  4. 元数据
    1. _index:文档存储位置
    2. _type:文档的对象类型
    3. _id:文档唯一标识符
  5. 自动判断类型
    1. boolean:truefalse
    2. long:123
    3. double:123.45
    4. date:"2020-05-30"
    5. string(已抛弃):"zhangsan"
      1. 需要分词的数据:text,支持分词,不支持聚合
      2. 不需要分词数据:keyword,不支持分支,支持聚合

        操作

        索引

        1. // 创建索引
        2. PUT person
        3. // 查询索引
        4. GET person
        5. // 删除索引
        6. DELETE person
        7. // 查询映射
        8. GET person/_mapping
        9. // 添加映射
        10. PUT person/_mapping
        11. {
        12. "properties":{
        13. "name":{
        14. "type":"keyword"
        15. },
        16. "age":{
        17. "type":"integer"
        18. }
        19. }
        20. }
        21. // 创建索引并添加映射
        22. PUT person
        23. {
        24. "mappings": {
        25. "properties": {
        26. "name":{"type": "keyword"},
        27. "age":{"type":"integer"}
        28. }
        29. }
        30. }
        31. // 索引库中添加字段
        32. PUT person/_mapping
        33. {
        34. "properties":{
        35. "address":{"type":"text"}
        36. }
        37. }

        数据操作

        ```json // 添加数据 POST http:/索引名/_doc {“name”:”zhangsan”, “age”:18} _doc 可以用 _create // 修改覆盖数据 POST http:/索引名/_doc/id {“name”:”zhangsan”, “age”:18} // 获取数据 GET http:*/索引名/_doc/id

// 获取所有数据 GET http:/索引名/_search // 完全覆盖 POST http:/索引名/_updata/id // 删除数据 DELETE http:/索引名/_doc/id // 条件查询 GET http:/索引名/_search?q=字段:内容 GET http:/索引名/_search {“query”:{“match”:{“字段”:”内容”}}} 查询:匹配查询:查询条件,中文在URL中可能有乱码 // 所有内容分页查询 GET http:/索引名/_search {“query”: { “match_all”:{}, “from”:0, “size”:2 }} 分页公式:(页码-1)*每页条数size {“query”: { “match_all”:{}, “_source”:[“name”, “age”], // 指定需要查询的内容字段 “sort”:[ “age”:{“order”:”desc”} // 根据字段排序 ] }} // 多条件查询 {“query”:{ “bool”:{ // 条件 “must”:[ // 多条件查询,must表示and,should表示or {“match”:{“category”:”小米”}}, {“match”:{“price”:1999.00}} ], “filter”:{ “range”:{ “price”:{“gt”:5000} // 过滤大于5000的商品 } } } }} // 倒排索引匹配 {“query”: { “match”:{“category”:”小米”} // 模糊查询”小华:小、华” }} {“query”:{ “match_phrase”:{“category”:”小华”} // 精准、完全查询 }, “highlight”:{ “fields”:{“category”:{}} // 高亮显示 } }

```