SQL Server полнотекстовый поиск - сопоставить все слова, но игнорировать порядок - PullRequest
0 голосов
/ 21 июня 2019

У меня проблема при использовании полнотекстового поиска SQL Server на SQL Server 2016.

Я хочу найти все строки, которые содержат все слова в тексте запроса, но не заботятся о порядкеслов в тексте запроса.

Пример, если одна строка столбца:

"this is my first hello world sql code"

Я хочу найти эту строку по любому из следующего текста запроса:

"hello"
"hello world"
"world hello"

Моя идея состоит в том, чтобы разбить текст запроса на список слов и соединить их с помощью AND, прежде чем передать текст в предикат CONTAINS.Например, если текст запроса «world hello», я буду использовать предикат CONTAINS следующим образом:

CONTAINS(text, 'world AND hello')

Я также рассмотрел стоп-слова в тексте запроса, поэтому перед тем, как соединить слова с AND, я сначала удалювсе стоп-слова из текста запроса.

Например, если текст запроса «это мой», окончательный текст, используемый в СОДЕРЖАНИИ, будет:

CONTAINS(text, 'this AND my')

Слово «есть» - этоудалено из текста.У меня есть список стоп-слов, который содержит все стоп-слова SQL Server по умолчанию, полученные из таблицы sys.fulltext_system_stopwords .

Пока все хорошо.Но проблема в том, что он не работает, если в тексте есть специальные символы.

Например, есть одна строка со значением:

"AT & T is cool"

И текст запроса "AT &T ", он не вернет результаты, если я просто воспользуюсь следующим кодом:

CONTAINS(text, 'AT AND & AND T')

Вместо этого я должен удалить '&' перед тем, как объединить слова.И аналогично всем другим специальным символам, таким как '-', '+', '*' и т. Д.

Но проблема в том, где получить полный список специальных символов, которые SQL-сервер удалил при построении инвертированияИндексные токены?

Или есть ли другие решения, удовлетворяющие моим требованиям к соответствию всех слов?

...