【发布时间】:2011-02-12 00:26:28
【问题描述】:
鉴于:
- 每个客户(企业客户)1 个数据库
- 5000 个客户
- 客户有 2 到 2000 个用户(平均约为 100 个用户/客户)
- 每个数据库 100k 到 1000 万条记录
- 用户需要经常搜索这些记录(这是导航数据的最佳方式)
可能的相关信息:
- 每周有几个新客户(工作时间内的任何时间)
- 多个网络服务器和数据库服务器(用户可以通过任何网络服务器登录)
- 让我们对语言或 sql 品牌保持不可知论,因为 Lucene(和 Solr)拥有广泛的支持
例如:
Joel Spolsky 在Podcast #11 中表示,他的托管网络应用产品 FogBugz On-Demand 使用了 Lucene。他有成千上万的按需客户。每个客户都有自己的数据库。
他们使用index per client and store it in the client's database。我不确定细节。而且我不确定这是否是对 Lucene 的严重修改。
问题:
您将如何设置 Lucene 搜索,以便每个客户端只能在其数据库中搜索?
您将如何设置索引?
您将索引存储在哪里?
您是否需要为所有搜索查询添加过滤器?
如果客户取消,您将如何删除他们的(部分)索引? (这可能是微不足道的——还不确定)
可能的解决方案:
为每个客户端(数据库)建立索引
- 专业版:搜索速度更快(比单一索引方法)。索引与客户数据的大小有关。
- 缺点:我不确定这意味着什么,也不知道这是否超出了 Lucene 的范围。
拥有一个带有 database_name 字段的单个巨大索引。始终包含 database_name 作为过滤器。
- 专业人士:不确定。也许对技术支持或计费部门搜索所有数据库信息有好处。
- Con:搜索速度较慢(比每个客户端的索引方法)。如果删除查询过滤器,则会出现安全漏洞。
最后一件事:
我也会接受使用Solr(Lucene 的扩展)的答案。也许它更适合这个问题。不确定。
【问题讨论】:
标签: full-text-search lucene solr full-text-indexing b2b