有一个需求是这样的,有表A,存放的是文章的所有信息,包括id,title,url,description,time等字段。每往表A中添加一篇文章时,会往lucene的index中添加进索引,但是索引中只有文章的id是stored的,其它内容都只设定unstored。这样能够保证索引表的大小。
当我输入关键字进行搜索时,我可以得到的搜索结构是类似id的一个数组。我希望通过这个id再从表中得到文章的所有信息。
求一个好的解决办法。因为我不能把搜索结果也就是文章的id数组作为一个存储过程的输入,那要保证搜索效率和lucene的index文件最小化,该怎么解决。
100分,给帮忙的兄弟!

解决方案 »

  1.   

    存放的是文章的所有信息,包括id,title,url,description,time等字段。每往表A中添加一篇文章时,会往lucene的index中添加进索引,但是索引中只有文章的id是stored的,其它内容都只设定unstored。这样能够保证索引表的大小。
    为什么要搞一个单独的索引表呢? 直接在文章表的 id, stored 列上建立复合索引不就行了吗?
      

  2.   

    直接使用数据库的索引, 你只需要按索引列做条件检索即可, 至于如何根据索引数据找回原始数据, 这些过程你根本不用管.
    而且sql会自动维护索引, 比你单独建立表强多了啊.即使因为某些需要, 有时你只需要检索 id, stored 列的数据, 那么, sql也会根据你的索引情况, 只检索索引数据, 不会检索原始表. 
    所以想不明白, 楼主干嘛单独建立类似索引的表, 而且要自己来维护等.
      

  3.   

    文章的id是stored的
    -----------------------直接在文章表的 id, stored 列上建立复合索引
    --------------
    ....  就这么多了一个stored字段,然后彻到复合索引上去了...
      

  4.   

    没有使用数据库的索引,是因为我想获得搜索上的更多的可扩展,或者是说搜索我想做的更好,那单纯的数据库的索引显然满足不了我的需求,所以我选择了lucene。从实际实现来说,我需要保证搜索的效率以及lucene中索引文件的大小的控制。基于以上考虑,我提出了上面的问题。希望能对我上面提出的问题给予必要的帮助,不胜感激
      

  5.   

    我的msn:[email protected]
    希望得到大家的帮助
      

  6.   

    即使你坚持两个表, 我也觉得这个处理在数据库中两表关联就成了.SELECT A.*
    FROM 表A A,(
        SELECT * FROM 你的索引表
        WHERE 查询条件
    )B
    WHERE A.ID = B.ID AND A.STORED = B.STORED
      

  7.   

    因为我不能把搜索结果也就是文章的id数组作为一个存储过程的输入是在你的需求里不能采用这种方法?还是你在这种方法的技术上有问题?
    LZ意思是不是就是输入一个ID数组,查询出符合条件的记录?create procedure query_by_id
        @idarray varchar(1000)   -- 查出来的数组合成,中间用 ,分开
    as
        select * from A where CharIndex(','+convert(varchar(10),id)+','  ,   ','+ @idarray+',') >0
    return 0