elasticsearch 属性筛选 商品属性筛选 elasticsearch设计实现
每个电商网站根据商品属性筛选商品是硬需求,实现方案有哪些?
纯mysql方案问题
纯mysql数据库查询性能无法达到要求,需要使用属性表不断自己做连接查询。
一是因为mysql字段需要实现设计好,商品属性又是不确定的,所以商品属性存储通常是mysql的纵表,这为属性筛选增加了无限障碍
同时,商品属性数据通常非常巨大,属性表又通常会用各种方式分表(按分类,按商品ID等),这更让属性筛选在性能上无法满足需求
mongodb+cache方案
早期很多网站采用的方式是mongodb+cache的方式,商品完整属性数据信息放到mongodb中,mongodb自身能利用好内存,小数据量可以直接用mongodb,稍大点的数据量,mongodb自身查询性能会迅速下降(mongo主要靠内存及少量好的索引提高查询性能,属性字段做索引不科学),这时可以mongodb配合cache(memcache,redis等),但是随着数据量的增加,cache命中情况越来越低,系统崩溃也是常有的事。
elasticsearch方案能很好的解决查询的性能问题
通常意义的搜索引擎都是全文搜索,但是elasticsearch却远不局限于此,能直接当“数据库用”啊,神器,性能?目前来看不是事。下面直接干货,不多解析为什么,想进一步了解的还是移步elasticsearch的文档Elasticsearch Reference
python 版创建index并添加测试数据
# encoding: utf-8
import json
import requests
from elasticsearch import Elasticsearch, helpers
def main():
mappings = {
"mappings": {
"goods":{
"properties": {
'goods_id': {
"type": "long",
},
"goods_name": {
"type": "text",
},
"attrs": {
"type":