2016-01-19 3 views
1

У меня есть таблица со следующими данными: текстуальнуюСтроительство TSQL полнотекстового поиска XOR

  1. Linker был
  2. Linker PAGINA
  3. Рехтер PAGINA

Я использую CONTAINSTABLE. Когда я использую следующее полное текстовое выражение "Linker*" AND "pagina*", возвращается только вторая запись.

Я попытался построить XOR, используя выражение ("Linker*" OR "pagina*") AND NOT ( "pagina*" AND "Linker*"), но все записи возвращаются.

Почему?

+0

Когда вы говорите * «возвращается только вторая запись» *, вы ожидали чего-то другого? Второй результат - то, что должно было быть возвращено. – Keith

+0

Кроме того, я не могу воспроизвести поведение вашего выражения XOR. Мой набор результатов включает только 1-й и 3-й записи. Возможно, ваш индекс FT не синхронизирован с данными, и вам нужно [повторно заполнить] (https://msdn.microsoft.com/en-us/library/ms142575.aspx)? – Keith

+0

Правильный результат XOR должен быть 1,3 ... Я выразил это в примере в ответе –

ответ

1

Я попытался это

SELECT * FROM CONTAINSTABLE(data,*,'("Linker*" OR "pagina*") AND NOT ( "pagina*" AND "Linker*")') AS Results 

Возвращается мне это: enter image description here

Вы также можете попробовать "и не" CONTAINSTABLE из И себя следующим образом:

SELECT * FROM CONTAINSTABLE(data,*,'"Linker*" OR "pagina*"') AS Results 
WHERE Results.[KEY] NOT IN 
(SELECT [Key] FROM CONTAINSTABLE(data,*,'"Linker*" AND "pagina*"')) 

Это возврат: enter image description here

+0

Можно сделать в одном заявлении? Данный пример является упрощением сложного запроса, который выполняется. –

+0

@ KeesC.Bakker, первый оператор - это всего лишь один оператор, и он работает нормально и возвращает тот же результат. –

+0

Похоже, что проблема связана с другими столбцами. Я буду смотреть дальше в свой набор данных. –