Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Имеется 2 вьюхи, которые обе содержат запрашиваемый текст. Но они привязаны к разным полнотекстовым каталогам.

При поиске по словам "ааа", "и", "ббб" оба запроса находят требуемые значения.
SELECT * FROM View1 WHERE CONTAINS(*, '"ааа*" & "и*" & "ббб*"')
SELECT * FROM View2 WHERE CONTAINS(*, '"ааа*" & "и*" & "ббб*"')

А при поиске по словам "ввв", "и", "ггг" только второй запрос находит требуемые значения. Первый ничего не выдает.
SELECT * FROM View1 WHERE CONTAINS(*, '"ввв*" & "и*" & "ггг*"')
SELECT * FROM View2 WHERE CONTAINS(*, '"ввв*" & "и*" & "ггг*"')

А если искать по словам "ааа", "ббб, но без слова "и", то оба запроса возвращают нужные значения.
SELECT * FROM View1 WHERE CONTAINS(*, '"ааа*" & "ббб*"')
SELECT * FROM View2 WHERE CONTAINS(*, '"ааа*" & "ббб*"')

Не понимаю, как такое может быть. Проверил, в обоих списках стоп-слов буква "и" для русского языка есть. Но все равно почему-то в одном случае она игнорируется, а в другом нет.
13 окт 11, 18:08    [11436722]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
grigrim,
какой язык используется в FTI?
13 окт 11, 21:13    [11437567]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
gds,

во всех проиндексированных полях русский.
13 окт 11, 21:53    [11437742]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Немного напутал с описанием запросов.
Третий вариант запросов, без слова "и" ищет по словам "ввв", "ггг".
SELECT * FROM View1 WHERE CONTAINS(*, '"ввв*" & "ггг*"')
SELECT * FROM View2 WHERE CONTAINS(*, '"ввв*" & "ггг*"')
13 окт 11, 22:00    [11437769]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
up
14 окт 11, 14:24    [11441223]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
Имеется 2 вьюхи, которые обе содержат запрашиваемый текст. Но они привязаны к разным полнотекстовым каталогам.

А population то сделан ?
14 окт 11, 14:29    [11441263]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory,

да, постоянно поддерживается в актуальном состоянии. Специально проверил через sys.fulltextindexes: в поле crawl_end_date стоит сегодняшняя дата.
14 окт 11, 15:36    [11442052]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
Используйте лучше FULLTEXTCATALOGPROPERTY
Гораздо больше информации
14 окт 11, 16:32    [11442600]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory,

спасибо. Только искаться нужные записи всё равно не стали. =)
14 окт 11, 16:58    [11442814]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
спасибо. Только искаться нужные записи всё равно не стали

Это функция для сравнения состоятния каталогов
Например, ItemCount
14 окт 11, 16:59    [11442830]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory,

я про неё уже почитал и сравнил каталоги.
Свойства ItemCount и UniqueKeyCount у них различаются, но так и должно быть.
Ещё каталоги различаются по свойству IndexSize: у каталога для View1 IndexSize=0, а у каталога для View2 IndexSize=1.
14 окт 11, 17:29    [11443061]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ну так и где гарантия того, что искомая строка отсутствует в одном из каталогов ?
14 окт 11, 17:31    [11443079]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory,

если выполнить все вышеупомянутые запросы, заменив CONTAINS на LIKE, тогда всё найдётся.
Плюс, как я писал выше, при поиске по словам "ввв", "ггг" точно также всё находится. Не находится только если в CONTAINS искать по '"ввв*" & "и*" & "ггг*"'.
14 окт 11, 17:54    [11443232]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
если выполнить все вышеупомянутые запросы, заменив CONTAINS на LIKE, тогда всё найдётся.

Ничего, что эти команды при работе используют разные физические объекты ?
14 окт 11, 19:19    [11443737]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory
Ничего, что эти команды при работе используют разные физические объекты ?

Но ведь результат поиска от этого меняться не должен. И, к тому же, добавление слова "и" кардинально влияет на результат в одном случае, но никак не влияет в другом.
15 окт 11, 20:51    [11446562]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
Но ведь результат поиска от этого меняться не должен.

Как это ?
Вы себе представляете когда данные обновляются в таблице, а когда в полнотекстовом индексе ?
15 окт 11, 21:31    [11446678]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory
Вы себе представляете когда данные обновляются в таблице, а когда в полнотекстовом индексе ?

Я имею ввиду, что так как необходимые записи находятся без слова "и", то должны находиться и вместе с ним. Содержимое таблиц не менялось. Это точно.
Да даже если бы и менялось, rebuild полнотекстового каталога выполнялся неоднократно. Это ведь должно было помочь.
17 окт 11, 11:07    [11449749]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
Я имею ввиду, что так как необходимые записи находятся без слова "и", то должны находиться и вместе с ним.

Вы сами сказали, что имеете два разных каталога fts
И если два одинаковых запроса к разным каталогам дают разные результаты, то наверное потому, что каталоги содержат разные данные
17 окт 11, 11:46    [11450001]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory
Вы сами сказали, что имеете два разных каталога fts
И если два одинаковых запроса к разным каталогам дают разные результаты, то наверное потому, что каталоги содержат разные данные

Поясню ситуацию ещё раз.
Каталоги в общем случае содержат разные данные, но совершенно точно оба содержат необходимые данные, которые я пытаюсь найти. Как подтверждение этому, привожу следующий эксперимент.
В одном случае, когда я выполняю одинаковые запросы по словам "ввв", "ггг", то оба каталога возвращают нужные данные.
Если добавить слово "и" в поиск, то один из каталогов ничего не возвращает, а второй исправно даёт тот же результат, что и в предыдущем запросе.
17 окт 11, 12:02    [11450168]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
Каталоги в общем случае содержат разные данные, но совершенно точно оба содержат необходимые данные, которые я пытаюсь найти. Как подтверждение этому, привожу следующий эксперимент.
В одном случае, когда я выполняю одинаковые запросы по словам "ввв", "ггг", то оба каталога возвращают нужные данные.
Если добавить слово "и" в поиск, то один из каталогов ничего не возвращает, а второй исправно даёт тот же результат, что и в предыдущем запросе

По-моему, эксперимент как раз показывает, что один из каталогов как раз НЕ содержит "и"
17 окт 11, 12:05    [11450192]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory
По-моему, эксперимент как раз показывает, что один из каталогов как раз НЕ содержит "и"

Возможно, так и есть. Подскажите, пожалуйста, как это проверить и исправить.
17 окт 11, 12:36    [11450496]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
Пересоздать второй каталог с такими же параметрами как и первый ?
17 окт 11, 13:22    [11450965]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory,

оказалось, что каталог в полном порядке. Дело было в другом.
Суть в том, что при поиске по условию CONTAINS(*, '"ввв*" & "и*" & "ггг*"') второй запрос выдавал не те записи, где есть слово "и", а те записи, где есть слова, начинающиеся с буквы "и".
Причина понятна, если посмотреть, как парсится поисковый запрос.

select * from sys.dm_fts_parser ('"ввв*" & "и*" & "ггг*"', 1049, 5,0)
keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term
0x043204320432101Exact Matchввв0ввв
0x0438201Exact Matchи0и
0x043304330433301Exact Matchггг0ггг

То есть слово "и" не воспринимается как шумовое слово.

select * from sys.dm_fts_parser ('"ввв и ггг"', 1049, 5,0)
keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term
0x043204320432101Exact Matchввв0ввв и ггг
0x0438102Noise Wordи0ввв и ггг
0x043304330433103Exact Matchггг0ввв и ггг

Если условие поиска заменить на CONTAINS(*, '"ввв и ггг"'), то "и" будет рассматриваться в качестве шумового слова.

Но проблема в том, что тогда не удастся получить записи, где слова "ввв" и "ггг" идут в обратном порядке ("ггг ввв") или перемежаются в другими словами ("ввв zzzzz ггг").

Подскажите, как лучше изменить условие для поиска.
17 окт 11, 14:10    [11451528]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
Glory
Member

Откуда:
Сообщений: 104751
grigrim
Суть в том, что при поиске по условию CONTAINS(*, '"ввв*" & "и*" & "ггг*"') второй запрос выдавал не те записи, где есть слово "и", а те записи, где есть слова, начинающиеся с буквы "и".

первый запрос делал тоже самое. Потому что * собственно и есть поиск по началу слова
О чем и написано в хелпе
17 окт 11, 14:24    [11451654]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает полнотекстовый поиск  [new]
grigrim
Member

Откуда: Москва
Сообщений: 89
Glory
первый запрос делал тоже самое. Потому что * собственно и есть поиск по началу слова
О чем и написано в хелпе

Я согласен.
Задача - найти все записи, где есть слова с префиксами "ввв" и "ггг" в любых комбинациях и последовательностях. Слово "и" можно игнорировать.
Сейчас сначала парсится входящий текст для поиска ('ввв и ггг'), получается '"ввв*" & "и*" & "ггг*"'. Получается, это неверно. Нужно как-то по-другому составлять условие для поиска. Но как, не понятно.
17 окт 11, 14:33    [11451763]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить