gpt4 book ai didi

mysql - 全文搜索 django : Mysql not so bad ?(对比 sphinx、xapian)

转载 作者:可可西里 更新时间:2023-11-01 07:03:59 25 4
gpt4 key购买 nike

我正在研究 django 的全文搜索引擎。它必须安装简单,快速索引,快速索引更新,索引时不阻塞,快速搜索。

在阅读了很多网页之后,我列出了一个简短的列表:Mysql MYISAM 全文、djapian/python-xapian 和 django-sphinx我没有选择 lucene,因为它看起来很复杂,也没有选择 haystack,因为它的功能比 djapian/django-spĥinx 少(比如字段加权)。

然后我做了一些基准测试,为了这样做,我在网上收集了许多免费书籍来生成一个包含 1 485 000 条记录(id、标题、正文)的数据库表,每条记录大约 600 字节长。从数据库中,我还生成了一个包含 100 000 个现有单词的列表,并将它们打乱以创建一个搜索列表。对于测试,我在我的笔记本电脑(4Go RAM,双核 2.0Ghz)上运行了 2 次:第一次,在服务器重新启动以清除所有缓存之后,第二次是为了测试缓存结果的好坏。 .以下是“自制”基准测试结果:

1485000 records with Title (150 bytes) and body (450 bytes)

Mysql 5.0.75/Ubuntu 9.04 Fulltext :
==========================================================================

Full indexing : 7m14.146s

1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:11.553524
next run : 0:00:00.168508

Mysql 5.5.4 m3/Ubuntu 9.04 Fulltext :
==========================================================================

Full indexing : 6m08.154s

1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:09.553524
next run : 0:00:20.316903

1 thread, 100000 searchs with single word randomly taken from database :
First run : 9m09s
next run : 5m38s

1 thread, 10000 random strings (random strings should not be found in database) :
just after the 100000 search test : 0:00:15.007353

1 thread, boolean search : 1000 x (+word1 +word2)
First run : 0:00:21.205404
next run : 0:00:00.145098

Djapian Fulltext :
==========================================================================

Full indexing : 84m7.601s

1 thread, 1000 searchs with single word randomly taken from database with prefetch :
First run : 0:02:28.085680
next run : 0:00:14.300236

python-xapian Fulltext :
==========================================================================

1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:26.402084
next run : 0:00:00.695092

django-sphinx Fulltext :
==========================================================================

Full indexing : 1m25.957s

1 thread, 1000 searchs with single word randomly taken from database :
First run : 0:01:30.073001
next run : 0:00:05.203294

1 thread, 100000 searchs with single word randomly taken from database :
First run : 12m48s
next run : 9m45s

1 thread, 10000 random strings (random strings should not be found in database) :
just after the 100000 search test : 0:00:23.535319

1 thread, boolean search : 1000 x (word1 word2)
First run : 0:00:20.856486
next run : 0:00:03.005416

如您所见,Mysql 在全文搜索方面一点也不差。此外,它的查询缓存非常高效。

Mysql 在我看来是个不错的选择,因为不需要安装任何东西(我只需要编写一个小脚本来将 Innodb 生产表同步到 MyISAM 搜索表),而且我并不真的需要高级搜索功能,如词干提取等...

问题来了:您如何看待 Mysql 全文搜索引擎 vs sphinx 和 xapian?

最佳答案

我没有测试过 Xapian,但我去年做了一个比较全文解决方案的演示: http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

Sphinx 的搜索速度最快。但是很难为增量输入的数据编制索引,因为将数据添加到索引的成本与从头开始创建整个索引的成本差不多。

所以有人维护两个 Sphinx 索引:一个大索引是存档数据,一个小索引是最近数据。他们定期(例如每周)将最近的索引合并到存档索引中(合并两个索引的成本更低),并截断小索引以为新的一周做准备。这对于论坛之类的东西非常有用,但对于 wiki 就没那么好了。

您还可以查看 Apache Solr .这是 Lucene 的包装器,它使 Lucene 的使用变得更加容易且功能更加强大。我在设计该演示文稿时并不知道 Solr。

华盛顿时报是一个将 Solr 与 Django 结合使用的项目示例:

关于mysql - 全文搜索 django : Mysql not so bad ?(对比 sphinx、xapian),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2776793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com