2009-07-29 41 views
2

对于一个城市,我有一个位置搜索website,我们开始收集城市中所有可能类别的数据,如学校,学院,部门商店等,并将其信息存储在单独的表,因为每个条目除了名称,地址和电话号码之外都有不同的细节。将搜索整合到后端为MYSQL的网站上

我们必须在网站中集成搜索功能,以便人们能够找到信息,所以我们建立了一个索引表,在这里我们存储了相同类别的类别和相关关键字以及如果搜索到了该类别对于。之后,我们添加了在名称和地址上搜索的功能,以及将包含所有表中的这些字段的另一个主表添加到一个位置。现在我的疑问是以下

  • 应用程序的设计是不正确的,我们已经写的选择查询*从母版,其中的名称,如“%$输入%”,一切都过去了,因为我们的数据库是MySQL和PHP的服务器端,有没有对我改进系统设计的建议?
  • 人们想要更多的功能,如拆分关键字并根据相关性对其进行排名等,有没有现成的框架可用于在数据库上运行搜索。
  • 我试过在MYSQL中使用全文搜索,它似乎对我有效,那就够了吗?

纠正我,如果我错了,我看了一下Lucene和谷歌自定义搜索,他们不工作通过抓取现有的网页和建立自己的索引做索引?我有一个MySQL数据库上的表的集合,我必须申请搜索。我有什么选择?

回答

3

为了解决你的观点:

  1. 使用%输入%是很差。这将导致全表扫描每个查询。在任何负载量或甚至远程大型数据集下,您的数据库服务器都会窒息。

  2. RDBMS本身并不是一个很好的解决方案。您正在寻找一个单独的解决方案来寻找合适的地方。可以与你的RDBMS良好沟通的东西很好;在RDBMS中运行的东西不会满足您的需求。

  3. MySQL中的全文搜索可用于非常基本的关键字搜索,仅此而已。有用的范围非常有限 - 您需要一个高度可预测的使用模型来利用内置搜索。它被称为“搜索”,但并不像大多数人所想的那样进行搜索。与我们期待Google和Bing搜索结果的质量相比,它没有比较。在“搜索”这个词的意义上,它就是其他的东西 - 比如Notepad vs Word。他们都是要输入的东西,但这就是它。

就处理搜索的单独系统而言,Lucene非常好。基本上,Lucene可以工作,但你希望它工作。您可以以编程方式与它交互以插入可索引文档。同样,可以给Google Appliance(而不是Google Custom Search)直接提供元数据源,这些元数据源可以公开您希望被索引的任何内容,例如直接来自数据库的数据。

+0

我该如何让lucene在数据库上工作? – 2009-07-29 04:37:24

2

看看斯芬克斯:http://www.sphinxsearch.com/

每他们的网站:

如何实现为10+百万行的表的全文搜索,跟上负载,并保持相关性?狮身人面像擅长这些谜语。

它现在是有很多的人在Rails社区很受欢迎,他们都狂欢它是如何真棒:)