Mysql 高效过滤/搜索

Mysql 高效过滤/搜索,mysql,search,lucene,filtering,saas,Mysql,Search,Lucene,Filtering,Saas,我们有一个托管应用程序来管理内容页面。每个页面可以有许多自定义字段,以及一些标准字段时间戳、用户名、用户电子邮件等 由于可能有数百个不同的站点使用该系统,处理过滤/搜索的有效方法是什么?绘制要缩小范围的栅格视图。您可以筛选特定字段userid、date,也可以输入全文搜索 例如,所有由userid10启动的页面都是针对MySQL数据库的快速查询。但是,像所有由用户ID为10且匹配[某些搜索查询]的用户启动的页面都会对数据库产生不利影响,因此它适合Lucene这样的搜索引擎 基本上,我想知道其他大

我们有一个托管应用程序来管理内容页面。每个页面可以有许多自定义字段,以及一些标准字段时间戳、用户名、用户电子邮件等

由于可能有数百个不同的站点使用该系统,处理过滤/搜索的有效方法是什么?绘制要缩小范围的栅格视图。您可以筛选特定字段userid、date,也可以输入全文搜索

例如,所有由userid10启动的页面都是针对MySQL数据库的快速查询。但是,像所有由用户ID为10且匹配[某些搜索查询]的用户启动的页面都会对数据库产生不利影响,因此它适合Lucene这样的搜索引擎

基本上,我想知道其他大型网站是如何做到这一点的。他们是否100%利用搜索引擎进行所有类型的过滤?他们是否将数据库查询与搜索引擎混合使用

如果我们只使用搜索引擎,那么新的/更新的对象出现在搜索索引中所需的延迟时间就会出现问题。也就是说,我读到立即更新索引并不是明智之举,而是分批更新。即使这意味着每5分钟一次,当用户查看一个简单的页面列表(例如类别5的搜索查询)时,如果他们最近添加的页面没有立即列出,用户也会感到困惑

我们正在使用MySQL,并且一直在密切关注Lucene的搜索。还有其他我不知道的技术吗


我的想法是提供一个简单的过滤页面,它使用MySQL对基本字段进行过滤。然后提供一个单独的全文搜索页面,显示类似于谷歌的搜索结果。这是唯一的办法吗

不要那么轻易地注销MySQL

使用数据库实现它,例如where子句中带有“like”的select或其他

配置它,必要时添加索引。推出一个测试版,这样您就可以从用户的实际数据模式中得到真实的数字——并不是所有的列都会被同等要求,等等


如果表现确实糟糕,那就是当你考虑其他选择的时候。您可以考虑调整SQL、数据库、运行数据库的机器,最后使用另一个技术堆栈…

< P> SoR或GrasSykOLL都为Lucene提供了更抽象的接口。p> 那就是:是的。如果你是一个主要由内容驱动的网站,提供对你的数据的全文搜索,那么除了像这样的东西之外,还有其他的东西在起作用。虽然MySql的全文索引并不完美,但在此期间它可能是一个可接受的占位符

假设您确实创建了Lucene索引,将Lucene文档链接到您的关系对象非常简单,只需在索引时向文档添加一个存储的属性。该属性可以是url、ID、GUID等。然后,搜索变成一个两阶段系统: 1对Lucene索引的问题查询显示简单的结果,如标题 2通过对象的键从关系存储中获取有关对象的更详细信息


由于在Lucene中文档的实例化相对昂贵,因此您只希望存储在Lucene索引中搜索的字段,而不是关系对象的完整克隆

如果您想使用MySQL或PostgreSQL,Sphinx是一个开源解决方案,它可以很好地与MySQL或PostgreSQL配合使用:

我们也有同样的问题,并考虑斯芬克斯和卢森作为可能的解决方案