模糊查询,按相似度排序

wo554006164 2011-01-16 01:35:07
A表有100W数据,现在要对某一字段进行模糊查询,并按相似度进行排序


比如有以下几条数据:
“北京新闻”
“最新新闻:北京XXXXXXX”
“上海新闻”
“新闻频道:北京台”
“北京市最新新闻”


输入“北京新闻”想得到的结果:
“北京新闻”
“新闻频道:北京台”
“北京市最新新闻”
“最新新闻:北京XXXXXXX”
“上海新闻”

主要按相似度来排序,这怎么做?
...全文
863 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
phdapp 2011-01-18
  • 打赏
  • 举报
回复
好在你不是两条两条的比,你要是两条两条的比那可以就是on^2的开销了。 这个你顶多On开销。
phdapp 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wo554006164 的回复:]
引用 10 楼 phdapp 的回复:
你可以再建一个相似度表(ID, name, distance)
distance就是相似度。


你要想计算相似度就要用到“字符串相似度”算法,你去google一下 edit distance可以搜出来很多算法,比如最简单的 levenshtein distance. 相似度从0~1, 越接近1越相似。


把你这100w数据做成一个arra……
[/Quote]

你也不用弄数组,直接while(rs.next) 条条循环比较就可以。

速度大概几秒。

wo554006164 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qianjin036a 的回复:]
这个要用词典来处理,否则,"新" 和 "新闻" 是无法区分开的.计算机并不知道这个词可以分解为"北京"和"新闻".
[/Quote]
能说下大概思路嘛
wo554006164 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 phdapp 的回复:]
你可以再建一个相似度表(ID, name, distance)
distance就是相似度。


你要想计算相似度就要用到“字符串相似度”算法,你去google一下 edit distance可以搜出来很多算法,比如最简单的 levenshtein distance. 相似度从0~1, 越接近1越相似。


把你这100w数据做成一个arraylist方式存储

以你的“北京新闻……
[/Quote]
这个效率会不会很低啊
phdapp 2011-01-17
  • 打赏
  • 举报
回复
你可以再建一个相似度表(ID, name, distance)
distance就是相似度。


你要想计算相似度就要用到“字符串相似度”算法,你去google一下 edit distance可以搜出来很多算法,比如最简单的 levenshtein distance. 相似度从0~1, 越接近1越相似。


把你这100w数据做成一个arraylist方式存储

以你的“北京新闻”为对比字符串,

while 循环你的arraylist, 分别检查每条记录那个词与“北京新闻”的distance(float型)结果是什么,存入相似度表,最后order by distancce就可以了。



Sphonix 2011-01-17
  • 打赏
  • 举报
回复
估计楼主是在做数据挖掘吧,找本数据挖掘的书看看~
-晴天 2011-01-16
  • 打赏
  • 举报
回复
这个要用词典来处理,否则,"新" 和 "新闻" 是无法区分开的.计算机并不知道这个词可以分解为"北京"和"新闻".
wo554006164 2011-01-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acherat 的回复:]
还有,如果是一个只有北京,一个只有新闻,怎么算!LZ说明白吧!
[/Quote]

按输入顺序来。
输入“北京新闻” 北京就是主要的 含“北京”的在含“新闻”的上面
输入“新闻北京” 新闻就是主要的
wo554006164 2011-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 maco_wang 的回复:]
你这个相似度是怎么计算的?

“新闻频道:北京台”
“北京市最新新闻”
这两条都是含有那4个字,都是分2部分,
下面的还是北京 后面有新闻,上面的是新闻,后面有北京,
为什么北京市最新新闻在下面?
[/Quote]
这种相似度是相同的,那么这两个谁先谁后都行。
AcHerat 2011-01-16
  • 打赏
  • 举报
回复
还有,如果是一个只有北京,一个只有新闻,怎么算!LZ说明白吧!
叶子 2011-01-16
  • 打赏
  • 举报
回复
你这个相似度是怎么计算的?

“新闻频道:北京台”
“北京市最新新闻”
这两条都是含有那4个字,都是分2部分,
下面的还是北京 后面有新闻,上面的是新闻,后面有北京,
为什么北京市最新新闻在下面?
AcHerat 2011-01-16
  • 打赏
  • 举报
回复

--对你那个字段建立索引,然后select ..like..union all..拼!效率没问题的。
rucypli 2011-01-16
  • 打赏
  • 举报
回复
做全文索引

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧