Поведение полнотекстового поиска SQL по числовым значениям - PullRequest
0 голосов
/ 27 июня 2018

У меня есть таблица с 200 миллионами записей. Один из столбцов определен как varchar (100) и включен в полнотекстовый индекс. Большинство значений являются числовыми. Только немногие не числовые. Проблема в том, что это не работает хорошо. Например, если строка содержит значение «123456789» и я ищу «567», эта строка не возвращается. Он будет возвращать только те строки, где значение равно «567» Что я делаю не так?

sql server 2012.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Полнотекстовый поиск не поддерживает символы подстановки

В моей настройке они возвращают одно и то же

SELECT *
  FROM [dbo].[somelogtable]
  where CONTAINS (logmessage, N'28400')

SELECT *
  FROM [dbo].[somelogtable]
  where CONTAINS (logmessage, N'"2840*"')

Это дает ноль строк

SELECT *
  FROM [dbo].[somelogtable]
  where CONTAINS (logmessage, N'"*840*"')

Вам нужно будет использовать LIKE или какой-нибудь причудливый подход к триграмме

0 голосов
/ 27 июня 2018

Вы можете сделать это:

....your_query.... LIKE '567%' ;

Это вернет все строки, которые имеют номер 567 в начале, конце или где-то между ними.

0 голосов
/ 27 июня 2018

Возможно, проблема в том, что вы используете неправильный инструмент, так как полнотекстовые запросы выполняют лингвистический поиск, и кажется, что вы хотите использовать простое условие "like".

Если вы хотите найти решение для своих нужд, вы можете опубликовать DDL + DML + «нужный результат»

0 голосов
/ 27 июня 2018

99% Вы пропускаете % после и перед строкой, которую вы ищете в предложении LIKE.
es:

SELECT * FROM t WHERE att LIKE '66'

аналогично использованию WHERE att = '66'

если вы напишите:

SELECT * FROM t WHERE att LIKE '%66%'

вернет вам все строки, содержащие 2 «шестерки» одну за другой

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