美文网首页
redis-search

redis-search

作者: xncode | 来源:发表于2020-12-07 17:46 被阅读0次

    基于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

    相关文章

      网友评论

          本文标题:redis-search

          本文链接:https://www.haomeiwen.com/subject/uqwzwktx.html