1.连接
import redis
r = redis.Redis(host="xx.xxx.xxx.xx", port=xxxx, db=0, decode_responses=True)
client = r.ft("xxx") #自己index的名称
2.查询
from redis.commands.search.query import Query
#1.以查询name为小红为例
query_filter = "@name:小红"
#query情况下,return_fileds中的值除id外,其他必须为index索引中的键名
query = Query(query_filter).return_fields("id","name")
result = client.search(query).docs
#2.以查询全部数据为例
#query_filter = "*" #表示查询所有数据,但默认Query返回的数量最多为10,可设置num的值进行全量返回
#query_num = 700 #例库中有700条数据,就设置为700
for i in result:
id = i.id
name = i.name
print(id,name)
query_filter的各种情况写法,根据值匹配
库中存储的数据举例:
name:小红,sex:女,like:放风筝,key:踢毽子
name:小蓝,sex:男,like:篮球,key:唱歌
name:张蓝,sex:男,like:唱歌,key:乒乓球
- 键之间的“与” &
“*”是通配符,代表0/n个字符
#name是“小”开头的,并且sex是女性
query_filter="(@name:小\*)&(@sex:女*)"
- 键之间的“或” |
#查询喜欢唱歌的。假设like和key属于相似键,且值可能出现重复。
query_filter="(@like:唱歌)|(@key:唱歌)"
- 值之间的“或” |
#查询叫小红或者小蓝的
query_filter="(@name:小红|小蓝)"
4.混合使用
#查询小红或小蓝中喜欢打球的
query_filter="(@name:小红|小蓝)&((@like:*球*)|(@key:*球*))"
3.统计
req = AggregateRequest(query_filter).group_by("@name", reducers.count())
res = client.aggregate(req).rows