【问题标题】:Are there any technologies that help develop website search?是否有任何技术可以帮助开发网站搜索?
【发布时间】:2010-11-12 17:06:11
【问题描述】:

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

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

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

欢迎提出任何其他意见或建议!!

非常感谢各位! 阿里

【问题讨论】:

    标签: search lucene performance


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢尤瓦尔。我已经在使用 Zend_Lucene。我读了 Mark 的文章,非常有趣。我想我现在会选择数据库选项,直到我对全文搜索的需求增长到值得重复努力以保持索引最新的程度。我不明白为什么 Lucene 不允许您在其查询中执行这些简单的数学运算?!我不是编写搜索引擎的专家(显然:),但与他们已经完成的相比,这似乎是微不足道的。再次感谢。
    【解决方案2】:

    使用 Lucene 进行基于文本的搜索,使用 SQL 进行 field_x > 5 搜索。我之所以这么说是因为基于文本的搜索很难做到正确,最好还是让专家来做。

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

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

    【讨论】:

    • 感谢您的评论罗伯特。我不需要像你提到的表达式生成器那样花哨的东西。只需要在内部使用数学表达式查询数据库。
    • 好的。您应该考虑将备注字段从 mySQL 数据库移动到 Lucene 数据库,以便您可以对它们进行文本搜索。大概您还可以将密钥放入 Lucene 数据库,以便您可以从 mySQL 端提取文本。现在你拥有了两全其美;您可以进行全文搜索,并且仍然可以在 SQL 数据库上进行数学搜索。
    • 是的,我明白这将如何运作。非常感谢您的帮助 Rob :)
    【解决方案3】:

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

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

    【讨论】:

    • 说实话,我什至不需要全文搜索。我只想减少数据库的负载,让一个快速、专业的索引(例如 Lucene)来处理我的大型搜索。那么,如果我只有数学条件,有没有比查询数据库更快的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2020-12-13
    相关资源
    最近更新 更多