Используя полнотекстовый поиск с файлами PDF в SQL Server 2005

Сначала напишите запрос, чтобы не было необходимости в преобразовании типов. Все сравнения в предложении where относятся к числам, поэтому используйте числовые константы:

SELECT s.*,
       sl.session_id,  -- unnecessary because s.id is in the result set
       sl.lesson_id
FROM cdu_sessions s INNER JOIN
     cdu_sessions_lessons sl
     ON sl.session_id = s.id
WHERE s.sort = 1 AND 
      s.enabled = 1 AND 
      s.teacher_id IN (193, 1, 168, 1797, 7622, 19951);

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

Я удалил столбец как псевдонимы (например, as session_id). Они были избыточными, потому что имя столбца является псевдонимом, а запрос не менял имя.

Для этого запроса сначала посмотрите на предложение WHERE. Все ссылки на столбцы взяты из одной таблицы. Они должны войти в индекс, прежде всего для сравнения равенств:

create index idx_cdu_sessions_4 on cdu_sessions(sort, enabled, teacher_id, id)

Я добавил id, потому что он также используется в JOIN. Формально id не требуется в индексе, если он является первичным ключом. Тем не менее, мне нравится быть явным, если я хочу это там.

Далее вам нужен индекс для второй таблицы. Оттуда ссылаются только два столбца, поэтому они оба могут войти в индекс. Первый столбец должен быть тем, который используется в join:

create index idx_cdu_sessions_lessons_2 on cdu_sessions_lessons(session_id, lesson_id);
7
задан Mun 7 November 2008 в 16:51
поделиться

2 ответа

Спасибо Ivan. Управляемый для возможного получения этой работы путем запуска всего с нуля. Это походит на порядок, в котором сделаны вещи, имеет большое значение, и совет, данный на связанном блоге выключить 'load_os_resources', устанавливающий после загрузки iFilter, вероятно, не является наилучшим вариантом, поскольку это заставит iFilter не быть загруженным, когда SQL Server будет перезапущен.

Если я вспоминаю правильно, последовательность шагов, которые в конечном счете работали на меня, была следующие:

  1. Удостоверьтесь, что таблица уже не имеет индекса (и если так, удалите ее),
  2. Adobe iFilter установки
  3. Выполните должностное лицо команды sp_fulltext_service 'load_os_resources', 1;
  4. Выполните должностное лицо команды sp_fulltext_service 'verify_signature', 0;
  5. Перезапустите SQL Server
  6. Проверьте, что PDF iFilter установлен
  7. Создайте полнотекстовый индекс на таблице
  8. Сделайте полный переиндекс

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

7
ответ дан 7 December 2019 в 07:52
поделиться

Я только что боролся с ним в течение часа, но наконец получил его работа. Я сделал все, что Вы сделали, поэтому просто пытаетесь упростить запрос (я заменил * с именем поля и удаленными двойными кавычками на термине):

SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(FileContent, 'house')

Также, когда Вы создаете полнотекстовый индекс, удостоверяются, что Вы указываете язык. И последняя вещь, возможно, можно попытаться изменить тип поля от Image кому: varbinary(MAX).

0
ответ дан 7 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: