基于redis创建的搜索 但不使用redis的内置数据结构sorted list
特性:
RediSearch
索引创建
一个电影包括:id title plot genre release_year rating votes poster imdb_id
构建电影的redis中使用的key(movie:001)对于电影的内容可以使用Hash
可在title year等内容上加上索引
FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_year NUMERIC SORTABLE
适应FT.CREATE语句,idx:movie时索引的名称,现在只支持on hash
关于prefix,电影的内容时在movie下的所以使用了movie:,如果想在tv_show下,可使用PREFIX 2 "movie:" "tv_show:"
关于schema,SCHEMA title TEXT SORTABLE,按照字段名称、类型,类型包括:text numeric tag sortable
创建完成后可使用info查看:
FT.INFO idx:movie
数据查询
FT.SEARCH idx:movie "war"
# 搜索包含war的
FT.SEARCH idx:movie "war" RETURN 2 title release_year
# 限制返回的数量和字段
FT.SEARCH idx:movie "war -jedi" RETURN 2 title release_year
# 搜索包含war但不包含jedi的
FT.SEARCH idx:movie " %gdfather% " RETURN 2 title release_year
# 模糊搜索 godfather
默认会查找所有的text类型field,可限制搜索的字段
FT.SEARCH idx:movie "@title:war" RETURN 2 title release_year
可使用tag打标签
FT.SEARCH idx:movie "@genre:{Thriller|Action}
# 使用花括号来搜索标签
对于数值的
FT.SEARCH idx:movie * FILTER release_year 1970 1980 RETURN 2 title release_year
FT.SEARCH idx:movie "@release_year:[1970 1980]" RETURN 2 title release_year
FT.SEARCH idx:movie "@release_year:[1970 (1980]" RETURN 2 title release_year
# 不包括1980
python
from redisearch import Client, TextField, IndexDefinition, Query
网友评论