有这样一个需求:
1,在数据库中有两张表tableA和tableB。2,tableA中保存有  百家姓(如:赵,钱,孙,李,,,(网络上流行的)痞子蔡,轻舞飞扬......)。2,tableB中保存存在有会员信息(如:赵本山,钱学森,孙悟空,李阿牛.....等  "字样"(跟tableA有模糊关系)),
在tableB中还有其它很多详细的"个人信息"。3,由于tableB中的信息不够完善,需要补充tableA的一些信息,(像:赵本山小时后的故事,钱家姓的由来.......),
-----现在我们需要把这些信息能合起来的就合起来,不能合起来的也要找出来,
并把它们分别保存在tableOk(找到匹配的)和 tableLose(未找到匹配的)表里去。大概的表结构如下:(其中tableA中的Xing和tableB中的XingMing存在模糊的对应关系)
      《现在的目标就是把两个表建立起关联来》
tableA:
         ID     Xing      History
      -------------------------------------
         1      赵本山    本山的小时候.....
         2      钱学      钱学是我国著名的.....
         3      悟空      悟空一个跟斗十万......
         4      轻舞飞扬  痞子蔡的小说.......
         .............................tableB:
        ID      XingMing         Phone           AGE   ....
     ---------------------------------------------
        1       中国赵本山      13800138000       50
        2       我国钱学森      13800138000       90
        3       神话孙悟空      13800138000       30000  
        4       山歌李阿牛      13800138000       70
      ..................................现在我要整合成tableC:
       ID       XingMing    Xing  Phone        AGE   History
    --------------------------------------------------------  
       1        赵本山      赵    13800138000  50    赵家的由来是。。
       2   
   .....................................
像用lucene实现,有没有思路???不用分词(词典就是tableA的Xing字段)。我们用存储过程实现了功能,但MSSQL2000执行后的效果达不到我们的需求,希望能找到更好的实现方式.
---------------------------------------------------------------------
SQL: select tableB.* , tableA.History into tableC
         from tableA,tableB        
     where 
         charindex(tableB.XingMing,tableA.Xing)>0----模糊匹配建立联系----以上是我们在数据库(存储过程)中实现的,但速度很慢,不合要求----------------------------------------------------------------------------
结果能实现功能,可性能不行,charindex()太耗时间了,like更不行。
请问用lucene实现的话应该怎样去做??????问题:
    1,把tableA中的”Xing“字段,保存在txt文件中,文本的一行表示一条记录(以此作为字典-Dic.txt)
       这样能实现吗?有的话怎样实现?不需要用lucene的话用什么比较好?谢谢    2,遍历tableB中的所有记录(几百万),如果存在:
           tableB.XingMing like ‘% Dic.txt.任一行 %’----模糊匹配成功--保存到tableOK。
       用lucene是怎样实现的?给个简单例子。谢谢
    

解决方案 »

  1.   

    作为大数据量的查询,lucene无疑是很适合的一种解决方案。
    我这里拿我实际项目中运用到的例子说明下吧: // 申明一个IndexSearcher对象
    IndexSearcher searcher = new IndexSearcher(directory);
    Analyzer analyzer = new StandardAnalyzer();
    BooleanQuery booleanQuery = new BooleanQuery();
    Sort sort = new Sort("xxx", true);
    Query query = new QueryParser("coloum", analyzer).parse("赵……");
    booleanQuery.add(query, BooleanClause.Occur.MUST);
    Hits hits = searcher.search(booleanQuery, sort); if (hits != null) {
    for (int i = 0; i < hits.length(); i++) {
    Document doc = hits.doc(i);
    System.out.println((doc.get("coloum")));
    }
    }
    以上我只贴了查询的一个过程,lucene包括建立index,定时更新,查询优化,这个就要去找文档慢慢研究了
    希望对楼主有点帮助
      

  2.   

    晕了,怎么我贴的代码变成这种玩意了,明明不是这些,我再贴一次,希望对楼主有所帮助 IndexSearcher searcher = new IndexSearcher(directory);
    Analyzer analyzer = new StandardAnalyzer();
    BooleanQuery booleanQuery = new BooleanQuery();
    Query query = new QueryParser("coloum", analyzer).parse(keyword);
    Hits hits = searcher.search(booleanQuery);
    for (int i = 0; i < hits.length(); i++) {
    Document doc = hits.doc(i);
    System.out.println(doc.get(HouseFieldEnum.DISTRICT_ID.name()));
    }