A表有100W数据,现在要对某一字段进行模糊查询,并按相似度进行排序
比如有以下几条数据:
“北京新闻”
“最新新闻:北京XXXXXXX”
“上海新闻”
“新闻频道:北京台”
“北京市最新新闻”
输入“北京新闻”想得到的结果:
“北京新闻”
“新闻频道:北京台”
“北京市最新新闻”
“最新新闻:北京XXXXXXX”
“上海新闻”主要按相似度来排序,这怎么做?

解决方案 »

  1.   


    --对你那个字段建立索引,然后select ..like..union all..拼!效率没问题的。
      

  2.   

    你可以再建一个相似度表(ID, name, distance)
    distance就是相似度。
    你要想计算相似度就要用到“字符串相似度”算法,你去google一下 edit distance可以搜出来很多算法,比如最简单的 levenshtein distance.  相似度从0~1, 越接近1越相似。
    把你这100w数据做成一个arraylist方式存储以你的“北京新闻”为对比字符串,while 循环你的arraylist, 分别检查每条记录那个词与“北京新闻”的distance(float型)结果是什么,存入相似度表,最后order by distancce就可以了。
      

  3.   


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

  4.   

    好在你不是两条两条的比,你要是两条两条的比那可以就是on^2的开销了。 这个你顶多On开销。