- Elasticsearch (简称ES)是一个分布式、restful 风格的搜索和数据分析引擎
倒排索引
- 步骤
- 数据根据词条进行分词,同时记录文档索引位置
- 将词条相同的数据化进行合并
- 对词条进行排序
- 过程
- 先将搜索词语进行分词,分词后在倒排索引列表查询文档位置(docId),根据docId查询文档数据。
- 查看所有索引库:GET /_cat/indices?v
- 查看一个索引库:GET/索引库名
- 创建索引库:
PUT /索引库名 { "settings": { "number_of_shards": 3, # 主分片数 "number_of_replicas": 2 # 副分片数 } }2. 映射 *** 作
- type 字段类型
- index 是否索引:取决于是否以该字段进行搜索
- store 是否存储:取决于搜索结果集中是否展示该字段,es中即使设置为false,依然存储,存储到_source。如果设置为true,会额外保存一份
- analyzer:分词器,这里使用ik分词器:ik_max_word或者ik_smart
PUT /索引库名/_mapping { "properties": { "字段名": { "type": "index": "analyzer" } } }3. 文档的CRUD
- 新增/更新
POST /索引库名/_doc/{id} { "字段名": "字段值" }
- 删除
DELETe /索引库名/_doc/{id}
- 查询
GET /atguigu/_search { "query": { "match_all": {} } }
- 匹配查询
"match": { "字段名": { "query": "条件", "operator": "and/or" } }
- 词条查询:最小的分词单元,条件必须是最小的分词单元
"term": { "字段名": { "value": "词条条件" } } "terms": { "字段名": [ "词条条件" ] }
- 范围查询
"range": { "字段名": { "gt/gte": 起始值, "lt/lte": 截止值 } }
- 组合、布尔查询
"bool": { "must/must_not/should": [ {},{} ] }
- 过滤查询:不影响得分,进而就不影响排名
"bool": { "must": [], "filter": [], }
- 排序查询
"sort": [ { "字段名": { "order": "asc/desc" } } ]
- 分页查询
from: (pageNum - 1) * pageSize size: pageSize
- 高亮查询
"hignlight": { "fields": {"字段名":{}}, "pre_tags": "", "post_tags": "" }
- 结果集过滤
"_source": { "includes/excludes": ["字段列表"] }五、数据库中的数据批量导入索引库
- 添加依赖
- 配置 yml 配置文件
- 构建一个 Goods 对象(索引)
- 提供数据的七个接口
- 分页查询已上架的SPU信息
- 根据SpuId查询对应的SKU信息(接口已写好)
- 根据分类id查询商品分类(逆向工程已自动生成)
- 根据品牌id查询品牌(逆向工程已自动生成)
- 根据skuid查询库存(gmall-wms中接口已写好)
- 根据spuId和cid查询检索规格参数及值(cid用于查attr_id)
- 根据skuId和cid查询检索规格参数及值(cid用于查attr_id)
- 创建一个 GoodsRepository接口 用于文档 *** 作
- 将数据批量导入索引库,实现数据同步
- 构建搜索请求体,设置索引库 并设置搜索条件构建器
- 执行查询
- 构建查询条件(bool查询)
- 匹配查询
- 过滤查询
- 品牌过滤
- 分类过滤
- 价格区间过滤
- 是否有货
- 规格参数的过滤
- 构建排序
- 构建分页
- 构建高亮
- 构建聚合
- 构建品牌聚合
- 构建分类聚合
- 构建规格参数的嵌套聚合
- 构建结果集过滤
- 解析结果集
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)