Elasticsearch索引创建与搜索

目录

ES的创建索引

ES的插入

ES的搜索

ES的全文搜索

ES的过滤搜索


ES的创建索引

cpp 复制代码
POST /user/_doc 
{
  "settings": {   配置索引级别参数
    "analysis": {   配置文本分析器
      "analyzer": {   定义分词器类型
        "ik": {   ik就是采用中文分词器
            "tokenizer": "ik_max_word"  IK分词器的最大粒度模式
        }
      }
    }
  },
  "mappings": {    定义索引的映射
    "dynamic": true,  允许自动添加新字段,这个字段照着写就完事了
    "properties": {   //这个里面的就是所有字段,包括可匹配项和不可匹配项
      "昵称": {  字段         
        "type": "text", 关键字字段类型, text就是文本类型就是string,会被分词,支持全文搜索
        "analyzer": "ik_max_word"  使用上面定义的 ik 分词器
      },
      "用户ID": {         
        "type": "keyword",  关键字类型,就是string,不分词,整体匹配
        "analyzer": "standard" 使用默认的标准分词器
      },
      "手机号": {         
        "type": "keyword",
        "analyzer": "standard"
      },
      "描述": {           
        "type": "text",
        "enabled": false  禁用该字段!不会被索引,也不能被搜索,仅存储
      },
      "头像ID": {         
        "type": "keyword",
        "enabled": false  
      }
    }
  }
}

创建索引及关键字时使用POST /user/_doc 进行post请求 /user是自定义索引名,/_doc是索引类型,都这么写的。

ES的插入

cpp 复制代码
POST /user/_doc/_bulk  最后一个/_bulk是批量插入的标记,如果只插入一条就不用了
{"index":{"_id":"1"}}  先插入一个id作为index
{"user_id":"USER4b862aaa-2df8654a-7eb4bb65e3507f66","nickname":"昵称1","phone":"13800000001","description":"签名1","avatar_id":"头像1"} //到这里算一条信息
{"index":{"_id":"2"}}
{"user_id":"USER14eeeaa5-442771b9-0262e455e4663d1d","nickname":"昵称2","phone":"13800000002","description":"签名2","avatar_id":"头像2"}
{"index":{"_id":"3"}}
{"user_id":"USER484a6734-03a124f0-996c169dd05c1869","nickname":"昵称3","phone":"13800000003","description":"签名3","avatar_id":"头像3"}
{"index":{"_id":"4"}}
{"user_id":"USER186ade83-4460d4a6-8c08068f83127b5d","nickname":"昵称4","phone":"13800000004","description":"签名4","avatar_id":"头像4"}
{"index":{"_id":"5"}}
{"user_id":"USER6f19d074-c33891cf-23bf5a8357189a19","nickname":"昵称5","phone":"13800000005","description":"签名5","avatar_id":"头像5"}
{"index":{"_id":"6"}}
{"user_id":"USER97605c64-9833ebb7-d045535335a59195","nickname":"昵称6","phone":"13800000006","description":"签名6","avatar_id":"头像6"}

KV形式的插入,中间用,隔开其中不可以换行。

ES的搜索

ES的全文搜索

cpp 复制代码
POST /user/_doc/_search 
{
  "query": {  查询的根对象,所有查询条件都放在里面
    "match_all": {}  匹配所有文档,没有过滤条件
  }
}

ES的过滤搜索

cpp 复制代码
POST /user/_doc/_search?pretty
{
  "query": {
    "bool": {   bool查询组合多个查询条件
      "must_not": [  严格不可匹配项
        {
          "terms": {    多值精确匹配,匹配项如下
            "user_id.keyword": [ 不可匹配中的字段,加上keyword防止其内容分词导致不严格
              "USER4b862aaa-2df8654a-7eb4bb65e3507f66",
              "USER14eeeaa5-442771b9-0262e455e4663d1d",
              "USER484a6734-03a124f0-996c169dd05c1869"
            ]
          }
        }
      ],
      "should": [  可选匹配项,任意一个字段匹配或者模糊匹配上就可以
        {
          "match": {  匹配字段
            "user_id": "昵称"
          }
        },
        {
          "match": {
            "nickname": "昵称"
          }
        },
        {
          "match": {
            "phone": "昵称"
          }
        }
      ]
    }
  }
}
相关推荐
huisheng_qaq12 天前
【项目篇-01】Vmware虚拟机和环境安装配置
redis·mysql·canal·rocketmq·es·vaware虚拟机
JAVA面经实录91713 天前
Elasticsearch 完整版完整知识体系
java·elasticsearch·搜索引擎·es
代码讲故事13 天前
在没有kibana的ES(elasticsearch)线上生产环境集群中,如何通过命令行修改或增加字段而不需要reindex?
大数据·elasticsearch·搜索引擎·命令行·es·索引·模版
yurenpai(27届找实习中)20 天前
Elasticsearch 核心总结 + 面试题实战(黑马点评项目)
redis·es
徐小青青啊22 天前
es集群不中断实时数据更新损坏节点硬盘
大数据·elasticsearch·搜索引擎·es
醇氧24 天前
【Hermes Agent】使用阿里云百炼 Token Plan(方式一:命令行一键配置)
阿里云·云计算·es·openclaw
RemainderTime1 个月前
基于Spring AI + 阿里百炼 DashScope:构建 AI Agent RAG 企业级知识助手
人工智能·后端·spring·ai·es
Johnstons1 个月前
Wireshark 和 tcpdump 到底怎么选?网络故障排查实战中的边界、判断标准与落地清单
wireshark·php·es·tcpdump·抓包分析·抓包与协议分析工具选型
Johnstons2 个月前
TCP Reset(RST)异常是什么?一文讲透连接被动中断的识别方法、适用场景、与超时断开的边界及排查清单
网络协议·tcp/ip·php·es·抓包分析
Johnstons2 个月前
Wireshark ExpertInfo是什么?一文讲透异常分级、适用场景、和传统抓包阅读的区别与排查标准
网络·测试工具·wireshark·es