redis-redissearch临时笔记
官方文档
https://redis.io/docs/interact/search-and-query/
底层数据结构支持
HASH
FT.CREATE books-idx ON HASH PREFIX 1 book:details SCHEMA title TEXT categories TAG SEPARATOR ";"
SETbook:details :1 name "test data" tag_ids "1;2;3"
JSON
FT.CREATE itemIdx ON JSON PREFIX 1 item: SCHEMA $.name AS name TEXT $.tag_ids as tag_ids TAG SEPARATOR ","
JSON.SET item:1 $ '{"name":"小明","tag_ids":"1,2,3,4,5,6,13"}'
FT.SEARCH itemIdx '@tag_ids:{5}'
中文支持
FT.ADD itemIdx item:6 1.0 LANGUAGE chinese FIELDS name "我爱广州小蛮腰" tag_ids "1,2,3,4,5,6,13"
误区
其实很多地方往往需要模糊搜索
可以搜索加上** 他会在倒排索引里面去匹配。感觉就像全表扫描了。走倒排索引又有误差
总结
优点
1.针对少量数据,大量IO(读写),可以放到redissearch构建搜索索引
缺点
针对大量数据放到redissearch感觉不合适,分词没有es灵活
我什么时候会选择redissearch
1.少量数据(redis内存支持情况) 大量读写io
2.一些高级查询,比如geo 查附近门店。构建es都引入一个中间件感觉不方便
总的来说数据库不支持的查询,redis支持,并且数据量不大的情况选择redissearch
关于倒排索引
其实倒排索引还是有局限性,很多后端场景是需要模糊查询,不需要分词查询就不上es或者redissearch了