在java中实现搜索过滤器

时间:2011-06-16 12:32:56

标签: mysql search filter lucene cassandra

我们需要针对用户个人资料为我的社交网站实施搜索过滤器(类似于Net-log),个人资料中的过滤器包括年龄范围,性别和兴趣

我们在MySQL上运行大约1M个配置文件,MySQL似乎不是实现此类过滤器的正确选项,所以我们也在考虑Cassandra,

那么实现这种过滤器的最佳方法是什么,结果需要非常快

e.g。年龄= 18-24岁,性别=男性和兴趣=足球

年龄,性别和兴趣是varchar

EDITED


让我重新解释一下这个问题,我怎样才能获得任何类型搜索的最快结果。 它可以基于配置文件名称,也可以是1M配置文件记录中的任何其他配置文件。

由于

2 个答案:

答案 0 :(得分:3)

它可以很好地为您的项目提供基础SQL更改。您可能需要考虑将Interest列从自由输入字段(varchar)更改为标记(例如,在附加表上为“多对多”)。

您使用了Football的示例,并在其上设置了like运算符。如果您将其更改为标记,那么您将遇到决定放置位置的初始结构问题:

football
Football
American Football
Australian-rules football

但是一旦你这样做了,标签就会帮助你的选择语句更快。

如果不进行此更改,您将把数据管理问题从数据库(配备处理它)推送到Java(可能不是)。

答案 1 :(得分:0)

尝试优化查询可能有一定意义(至少可以做一些事情)。听起来你有一个大型数据库,如果你返回一个大的结果集并用java过滤结果,你可能会因为缓存中保存的所有数据而出现性能问题。

如果是这种情况,您可以尝试的一件事就是在数据库之外缓存结果并从中读取。这是Hibernate does very well的内容,但如果需要,您可以实现自己的版本。如果这是你感兴趣的东西,Memcached,是一个很好的起点。

我刚刚注意到了MySQL。我不知道它有多高效,但它们有full text searching functions的内置,这可能有助于加快速度。