chr*_*der 5 mysql lucene search filtering saas
我们有一个托管应用程序来管理内容页面.每个页面可以有许多自定义字段,以及一些标准字段(时间戳,用户名,用户电子邮件等).
可能有数百个不同的站点使用该系统 - 处理过滤/搜索的有效方法是什么?画出要缩小的网格视图.您可以筛选特定字段(用户ID,日期),也可以输入全文搜索.
例如,"由userid 10启动的所有页面"将是对MySQL数据库的非常快速的查询.但是诸如"由用户ID为10且匹配[某些搜索查询]"的用户启动的所有页面都会对数据库产生影响,因此它适用于像Lucene这样的搜索引擎.
基本上我想知道其他大型网站是如何做这种事情的.他们是否100%使用搜索引擎进行所有类型的过滤?他们是否将数据库查询与搜索引擎混合?
如果我们仅使用搜索引擎,则新的/更新的对象在搜索索引中出现的延迟时间会出现问题.也就是说,我已经读过,立即更新索引是不明智的,而是分批进行.即使这意味着每5分钟一次,当用户查看简单的页面列表(例如"类别:5"的搜索查询)时,他们最近添加的页面没有立即列出时,用户会感到困惑.
我们正在使用MySQL,并一直在密切关注Lucene的搜索.还有其他一些我不知道的技术吗?
我的想法是提供一个简单的过滤页面,它使用MySQL来过滤基本字段.然后提供一个单独的全文搜索页面,其中会显示与Google类似的结果.这是唯一的方法吗?
Solr 或grassyknoll 都提供了稍微更抽象的Lucene 接口。
那说:是的。如果您是一个主要内容驱动的网站,提供对数据的全文搜索,那么除了 LIKE 之外还有其他功能可以发挥作用。虽然 MySql 的 FULLTEXT 索引并不完美,但它可能是过渡期间可接受的占位符。
假设您创建了一个 Lucene 索引,将 Lucene Documents 链接到您的关系对象非常简单,只需在索引时向文档添加一个存储的属性(该属性可以是 url、ID、GUID 等)。然后,搜索就变成了 2阶段系统: 1) 向 Lucene 索引发出查询(显示标题等简单结果) 2) 通过对象的键从关系存储中获取有关该对象的更多详细信息
由于 Documents 的实例化在 Lucene 中相对昂贵,因此您只想存储在 Lucene 索引中搜索的字段,而不是关系对象的完整克隆。