比如有多个list<String>的对象集合:
list1:[我][是][中][国][人]
list2:[我][在][中][国]
list3:[我][是][人]
list4:[我][在][家]
list5:[我][不][系][上][海][人]
.....
怎么快速在众多集合中找出包括“人”“是”的list?
目前的我的做法只能建简单的索引,即把“人”当作一个key,对应的集合当作value,放进hashmap里面,然后把各字得出来的集合再求交集。
即查“人”的结果集合是list1,list3,list5;“是”的结果集合是list1,list3,所以交集结果是:list1,list3。
但这里会有个问题,我不能利用“人”得出来的中间结果list1,list3,list5,再在这些集合的基础去过滤“是”。
集合可能会比较多,对性能要求比较高,所以有没有利用中间结果的高效方法,或者其他更好办法?
问题补充
需要建立一个反向索引表,正如楼主所做的。
楼主的需求是组合关键字。有些全文搜索引擎开源项目,也许可以参考算法实现。
比如,lucene, sphinx
两个或多个集合求交集,应该会有高效率的算法。
对,我参考的就是反向索引,但我知道的只是表层,lucene的算法具体实现我还真没研究过。。。搜索引擎都是boolean运算,不一定是集合运算。。还真想不出好方法
问题补充
补充点,我这个东西都是内存版的,全部在内存运行
问题补充
应该就可以了吧....
我现在那种索引就是倒排索引嘛,只是说,集合多的时候怎么筛选会有效率