Используйте полнотекстовый поиск Ms SQL SERVER для сопоставления слов - PullRequest
1 голос
/ 12 мая 2009

Мне нужно написать запрос в SQL, используя полный текст, который возвращает записи в порядке совпадения количества слов

exmaple: в базе данных

row 1 = "brown cow" //1 match
row 2 = "lazy dog" //2 matches

Пользовательский ввод: «Быстрая коричневая лиса перепрыгивает через ленивую собаку»

оба входа будут возвращены со строкой 2 вверху

Ответы [ 3 ]

1 голос
/ 13 мая 2009

В MS SQL для партизанского подхода вы можете сделать что-то вроде этого:

select * from MATCHTABLE where patindex('%'+MATCHCOLUMN+'%','The quick brown fox jumps over the lazy dog')>0

где MATCHTABLE - таблица с двумя примерами строк, а MATCHCOLUMN - имя столбца с текстом.

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

1 голос
/ 02 октября 2012

Учитывая следующие допущения:

  1. Ваша таблица уже содержит полный текст
  2. Ваша таблица называется "example" и содержит 2 столбца с именами "exampleID" и "exampleText" (exampleText указан в вашем полнотекстовом индексе)
  3. Вы можете проанализировать ввод пользователя, как показано для каждого примера:

parsedUserInput = 'The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog'

Тогда я думаю, что вы ищете что-то вроде этого:

SELECT display_term as term
,document_count as numberOfOccurences 
FROM sys.dm_fts_index_keywords (db_id(),object_id('example'))
WHERE display_term IN({parsedUserInput}) 

В противном случае, возможно, ранг будет работать для вас ...

parsedUserInput = "Быстрое" ИЛИ "ИЛИ" коричневое "ИЛИ" лиса "ИЛИ" перепрыгивает "ИЛИ" на "ИЛИ" на "ИЛИ" ленивое "ИЛИ" собака "

SELECT 
ranks.rank AS rank
,e.exampleID
FROM example e
INNER JOIN CONTAINSTABLE (  example, exampleText, ' **{parsedUserInput}** '   ) AS ranks
    ON e.exampleID = ranks.[KEY]
WHERE ranks.rank > 0 -- return only rows that have a rank
order by ranks.rank desc 
1 голос
/ 12 мая 2009

Я не вижу ничего, что изначально делает это. Возможно, вам придется создать функцию, которая сравнивает результаты с вашей строкой поиска, чтобы определить, сколько совпадений существует.

Затем вы можете передать результаты поиска в свободном тексте в эту функцию, которая выдаст счетчик совпадений. Наконец, вы упорядочите результаты по количеству совпадений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...