有这样一个需求:
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,在数据库中有两张表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是怎样实现的?给个简单例子。谢谢
我这里拿我实际项目中运用到的例子说明下吧: // 申明一个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,定时更新,查询优化,这个就要去找文档慢慢研究了
希望对楼主有点帮助
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()));
}