我正在尝试在我的网站中实现搜索功能,该网站在金字塔上运行,我想知道解决这个问题的最有效方法是什么。我目前正在使用 SqlAlchemy 研究Whoosh和MySQL 全文搜索。我需要一个快速简单的实现,并且想知道哪一个是最好的选择。
2 回答
我尝试将全文与本机数据库一起使用一段时间,但要保持跨 sqlite、mysql 和 pgsql 工作的工作量太大。我把所有的搜索代码都移植到了 whoosh 上,从那以后我真的很开心。它适用于小型工作负载,是纯 python,无需设置服务器。
您只需像在磁盘上写入和更新文件一样实现它。从我读到的内容来看,它在数百万份文档中表现良好。我将它与索引大小约为 100MB 的 18k 文档一起使用。使用它实现各种标记化和其他配置有很大的灵活性。我真的建议人们从那里开始,如果他们长大了,然后考虑使用 elasticsearch、lucene/solr 等启动额外的进程。
你可以在这里看到我是如何实现它的:
https://github.com/mitechie/Bookie/blob/develop/bookie/models/fulltext.py
我使用 SqlAlchemy 事件挂钩更新它:
https://github.com/mitechie/Bookie/blob/develop/bookie/models/__init__.py#L663
你可以通过搜索来判断它的基本实现:
我是 ElasticSearch 的忠实粉丝。它是最容易设置、维护和使用的。
我通常使用请求。
索引:
requests.put("http://localhost:9200/myindex/category/",data=json.dumps(document))
寻找:
requests.get("http://localhost:9200/myindex/category/_search?q="+somequery)
您可以使用 DSL 进行更深入的搜索: