ssdb 全文搜索的实现

ssdb 作为key-value 数据库,底层没有提供全文搜索的功能,只能在应用层作检索。

ssdb 全文搜索的实现

过程是:遍历 -> 缓存 搜索结果

如下一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
kw_lower = kw.lower()
mc_key = 'search_kw:' + kw_lower

mc_value = cls.db.get(mc_key)
if mc_value:
    return json.loads(mc_value)

items = []

tb_name = 'article'
limit = 20

go_on = 1
key_start = ''

while go_on:
    kv_list = cls.db.hscan(tb_name, key_start, '', 100)
    if not kv_list:
        break
    for i in range(0, len(kv_list), 2):
        key_start = kv_list[i]
        item = json.loads(kv_list[i + 1])
        if kw_lower in item['title'].lower():
            items.append(item)
            if len(items) > limit:
                go_on = 0
                break

if items:
    cls.db.setx(mc_key, json.dumps(items), 3600)

原理

遍历某个 分析每条数据的内容,如果包含目标关键字则选中,可见效率比较低,酌情处理或可预见性的建立索引。

本文网址: https://pylist.com/topic/130.html 转摘请注明来源

Suggested Topics

ssdb go client 推荐

ssdb 数据库以前有过好多介绍,也对python 库有推荐,这次推荐它的 go sdk,支持连接池。...

用 misaka 实现 gfm Markdown 格式

misaka 是python 世界性能最好的 markdown 解析库,gfm (GitHub Flavored Markdown)是 github 扩展的格式。可以通过下面的方式用 misaka 实现 gfm 解析...

基于SSDB 的轻论坛

目前由SSDB 数据库驱动的开源项目还不多,这是一个示例,可作为SQL 转NoSQL 设计的参考。...

ssdb 在小内存vps 上的配置

ssdb 是一个数据结构和接口与redis 很相近的NoSQL 数据库,但它对内存依赖不高,数据可直接落到硬盘,所以 ssdb 在小内存上跑得也很欢。...

Leave a Comment