2012-04-06 43 views
1

我需要组合一个能有效提供关键字搜索功能的数据结构。针对关键字搜索的数据结构建议

我的指标是:

  1. 协卡50万件产品。
  2. 每个产品大约有20多个关键字(猜测)。
  3. 产品通过大约10位数字的ID进行标识,但可能是前进的任何ASCII代码。

我想尽可能地适合内存中的数据结构。我将在服务器上,以便我可以承担一些重要的内存可用性。

速度很重要。使用LIKE数据库查询将不是一个可接受的解决方案。

数据结构的任何想法?

我的想法:

TrieMap

非常有效的关键字,但没有将需要的产品ID挂任何叶子那么认真内存饿的列表。任何想法可以帮助这一点?

压缩

各种压缩方案浮现在脑海中,但没有跳出如显著的价值。

有没有其他人把这样的东西放在一起?你能分享你的经验吗?

数据可能会更改,但不会经常更改。每天重建结构以适应变化是合理的。

回答

2

你有没有想过在内存中或作为文件系统索引使用lucene

它速度很快,并且在将来可能出现的进一步要求上有很大空间。

+0

只是看着你如何使用lucene做到这一点,但它看起来像谷歌搜索是最好的事情 - http://javatechniques.com/blog/lucene-in-memory-text-search-example/ – pimaster 2012-04-07 00:25:56

+0

谢谢!!我花了半天的时间来构建一个可以工作的索引,它看起来会比使用Lucene完全替换现有的可疑搜索机制要多一点。一个非常特殊的软件包 - 只要它看起来像乍一看一样稳定。 – OldCurmudgeon 2012-04-10 15:02:01

+1

顺便说一句 - 有一个很好的Lucene教程文档[这里](http://alias-i.com/lingpipe-book/lucene-3-tutorial-0.5.pdf)。 – OldCurmudgeon 2012-04-10 15:28:01