【发布时间】:2010-09-29 07:18:38
【问题描述】:
我有一个不断增长的关键字数据库。我需要解析传入的文本输入(文章、提要等)并查找数据库中的哪些关键字出现在文本中。关键字的数据库比文本大得多。
由于数据库不断增长(用户添加了越来越多的关键字来关注),我认为最好的选择是将文本输入分解为单词并将其与数据库进行比较。我的主要困境是实现这个比较方案(这个项目将使用 PHP 和 MySQL)。
最简单的实现是针对关键字表创建一个简单的 SELECT 查询,其中有一个巨大的 IN 子句列出所有找到的关键字。
SELECT user_id,keyword FROM keywords WHERE keyword IN ('keyword1','keyword2',...,'keywordN');
另一种方法是在内存中创建一个哈希表(使用 memcache 之类的东西)并以相同的方式对其进行检查。
有没有人对这种搜索有任何经验,并且对如何更好地实现这一点有任何建议?我还没有尝试过这些方法中的任何一种,我现在只是在收集想法。
【问题讨论】:
-
这里有很多问题。有多少个独特的关键字(每个用户是否倾向于拥有相似的关键字)?你有多少内存?您需要数据是最新的还是可以定期对其进行一些处理?
-
正如第一段所说,关键字数据库的大小比文本中的单词大得多。文章在收到时进行处理,并向针对特定关键字注册的用户发送警报。目前内存不是问题。
-
我看不出你将如何变得更快,然后在内存(堆)中复制你的关键字表并建立索引并执行你在上面所做的事情或加入每篇文章在内存中创建的内容关键字表。(参与用户也会有所帮助)。不过,复制必须在您的应用中。
-
这也可能有用 - 我正在研究类似的问题:stackoverflow.com/questions/47762/how-to-ranking-search-results
标签: php mysql search keyword tokenize