有没有什么技术可以帮助开发网站搜索?

时间:2009-07-21 16:18:12

标签: search lucene performance

问题:的 我需要为网站编写高级搜索功能。所有数据都存储在MySQL中,我在顶部使用Zend Framework。我知道我可以编写一个脚本来获取搜索页面并从中构建一个SQL查询,但是如果有很多命中,这会变得极其缓慢。然后我将不得不深入了解优化数据库表/字段/等的细节。如果可能,我试图避免。

Lucene:我尝试了Lucene,但由于它是一个全文搜索引擎,它不允许任何数学运算符!所以,如果我想获得所有记录,其中field_x> 5,没办法(正确吗?)

全科医生?我想知道大型网站如何应对这种困境。是否有一种我不了解的标准方法,或者每个人都必须处理在某些时候优化数据库的令人讨厌的细节?我希望存在一些可以解决这个问题的快速索引/搜索技术(例如Lucene)。

任何其他评论或建议最受欢迎!!

非常感谢! 阿里

3 个答案:

答案 0 :(得分:1)

使用Lucene进行基于文本的搜索,并使用SQL进行field_x > 5次搜索。我之所以这么说是因为基于文本的搜索很难做到,而且你最好把它留给专家。

如果您需要用户具有构建数学表达式搜索的功能,请考虑编写表达式构建器对话框like this example以收集搜索短语。然后使用参数化SQL查询来执行搜索。

SqlWhereBuilder ASP.NET服务器控件
http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

答案 1 :(得分:1)

您可以在Lucene中使用过滤器对缩减的记录集进行文本搜索。因此,如果您首先查询数据库以获取所有记录,其中field_x> 5,构建一个过滤器(lucene文档ID列表)并将其与文本查询一起传递给lucene搜索方法。我刚刚学习这个,这里是我问的一个问题的链接(它使用Lucene.Net和C#,但它可能有帮助) - 忽略我的问题,只看看接受的答案:

How do you implement a custom filter with Lucene.net?

答案 2 :(得分:1)

您可以使用Zend Lucene进行文本搜索,并将其与MySQL结合使用以进行联接。 请参阅Mark Krellenstein's Search Engine vs DBMS有关选择的论文;基本上,搜索引擎更适合排名文本搜索;对于使用不同记录结构的更复杂的数据操作(例如连接),数据库更好。

对于简单的x> 5类型查询,您可以在Lucene中使用range query