基于单词匹配频率的sql最佳匹配

nlejzf6q  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(400)

我有这个sql代码,但它不工作。
它应该根据全词匹配的频率提取最佳匹配,但它提取了错误的行。语序应该无关紧要。
例如说@filter=“flower doe”
我的名字是这样的:

1: hello Doe John flower
2: wildflower test

虽然flower不是一个单独的词,而且第一行有两个匹配项,但它选择了第二行事件。
没有xml还有更好的方法吗?也许用子串,查林德克斯和伦?

BEGIN
  SET @Split = ' '
  SELECT @X = CONVERT(xml,' <root> <s>' + REPLACE(@filter,@Split,'</s> <s>') + '</s>   </root> ')

  ;with cte1 as (
   SELECT SearchItems = '%'+T.c.value('.','varchar(20)')+'%'
   FROM @X.nodes('/root/s') T(c)
  )
  SELECT Top 1  MYDB.* 
  FROM MYDB WITH(NOLOCK)
  INNER JOIN cte1 on MYDB.MYDBTitle like SearchItems
  AND MYDB.Category IS NOT NULL
END

我在这里有另一个尝试,没有xml是不行的
http://sqlfiddle.com/#!18/e2d69/1号

k75qkfdt

k75qkfdt1#

感谢所有看过这个的人。通过实现全文检索解决了这个问题。

相关问题