SQL лучшее соответствие на основе частоты совпадений слов - PullRequest
0 голосов
/ 18 июня 2020

У меня есть код sql, но он не работает.

Он должен выбирать лучшее совпадение на основе частоты совпадений полных слов, но вытаскивает неправильную строку. Порядок слов не имеет значения.

Например, скажем @filter = "flower Doe"

, и у меня есть MYDBTitle, например:

1: hello Doe John flower
2: wildflower test

Было выбрано событие второй строки, хотя цветок не является отдельным word и первая строка имеют два совпадения.

Есть ли лучший способ сделать это без XML? Может быть, с Substring, Charindex и LEN?

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

1 Ответ

0 голосов
/ 21 июня 2020

Спасибо всем, кто смотрел на это. Решилась путем реализации полнотекстового поиска.

...