使用Django和Algolia搜索模型索引持久化数据

2024-04-19 16:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

这对Django+Algolia来说是个很奇怪的例子。我使用的是Algolia特定的Django包:

$ pip install algoliasearch-django

我有以下模型模式:

^{pr2}$

索引为:

from algoliasearch_django import AlgoliaIndex

class RoomIndex(AlgoliaIndex):
    fields = ('title', 'last_activity')

    settings = {
        'searchableAttributes': ['title'],
        'attributesForFaceting': ['title', 'last_activity'],
        'hitsPerPage': 15,
    }

    index_name = 'Room Index'

基本上,要将“last_activity”值带到前端,它需要通过索引,该索引在运行时已更新:

$ python manage.py algolia_reindex

但是,最后一个活动来自最后一次(转换为人性化django自然时间,例如“3天前”等)在websocket连接中发送消息-持久化到数据库。除了需要运行algolia_reindex命令才能进行更新外,所有这些功能都能正常工作。在

很不确定如何才能同时完成这个任务。。。?在


Tags: installpipdjango模型title模式activity例子
1条回答
网友
1楼 · 发布于 2024-04-19 16:59:55

好吧,这个稍微复杂一点,因为我使用的是websockets。当消息被发送并持久化到数据库时,我们还可以在相关的“consumer”方法中执行以下操作(实际上,消费者.pywebsocket是否等同于视图.py文件,所以我应该知道这一点!)在

以下代码行起作用:

client = algoliasearch.Client(settings.ALGOLIA['APPLICATION_ID'], settings.ALGOLIA['API_KEY'])
index = client.init_index('Room Index')
res = index.partial_update_objects([{"last_activity": naturaltime(datetime.datetime.now()), "objectID": your_object_id]}])

客户机从u端传递的消息的值是什么。在

别忘了加上:

^{pr2}$

在顶部消费者.py文件!在

我还发现Algolia提供的特定于python的增量更新文档非常有用: 我https://www.algolia.com/doc/tutorials/indexing/synchronization/incremental-updates/

为了以“实时”的方式呈现更新后的时间,我使用jQuery,但是Vue.js版或者React.js公司同样有效。在

相关问题 更多 >