Полнотекстовый поиск с использованием MS SQL

01.08.16

Задачи пользователя - Поиск данных

В данной статье я покажу пример того, как можно использовать полнотекстовый поиск MS SQL. Сразу оговорюсь, статья не претендует на полноту, многие вещи вам придется додумывать или доделывать, моя задача лишь провести «лабораторную работу», показать, что это возможно и как это можно применять. Сделанные выводы и полученные результаты – это только мои выводы и мои результаты, в вашем случае, они могут быть другими. Пробуйте, экспериментируйте, получайте свой опыт и свои результаты.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
База 1С
.dt 1,30Mb
12 1 850 руб. Купить
Скрипт для создания базы полнотекстового поиска в MS SQL
.txt 4,50Kb
12 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Что такое полнотекстовый поиск, большинство специалистов знает и так, поэтому отдельно описывать это не будем, у MS SQL возможностей по сравнению с поиском 1С не меньше. Есть довольно интересная возможность – поиск с использованием синонимов или исключение определенных слов из поисковых выражений (стоп-листы).  Файл полнотекстового поиска 1С хранится на сервере приложений, полнотекстовый поиск – есть часть базы данных.  Полнотекстовый поиск SQL, по личному опыту, быстрее работает в случае, когда вам нужно найти большое количество слов, которые входят в искомую строку. Например, по строке неограниченной длины, когда длина строки может достигать 3-4х тыс символов и количество строк от 300 тыс, полнотекстовый поиск SQL работает существенно быстрее поиска 1С, если мы ищем строку из минимум 5 слов.

Полнотекстовый поиск SQL похож на оператор LIKE, однако по утверждению MS, LIKE работает медленнее по большому количеству неструктурированных данных, да и имеет существенно меньше возможностей для поиска, так же полнотекстовый поиск может индексировать не только строковые поля.

Основная идея работы – вынесение данных, которые подлежат полнотекстовому индексированию во внешнюю БД, по этой БД создается индекс с автоматическим обновлением. Во внешней базе содержатся внутренние идентификаторы объектов базы, тип и вид объекта метаданных, имя реквизита и номер строки для документов, что позволяет однозначно идентифицировать объект и свойство, которому принадлежит хранимая строка. В базе 1С есть план обмена, который регистрирует изменения в объектах и регламентное задание, которое помещает значения нужных свойств. Какие объекты и какие их реквизиты нужно индексировать – хранится в справочнике НастройкиПолнотекстовогоПоиска. Так же в базе есть обработка, которая формирует поисковый запрос на языке TSQL и отправляет его на сервер БД, затем она получает результат и, на основе хранимых во внешней таблице данных, ассоциирует строки результата с объектами в базе 1С, что в данном примере используется для поиска цен в документах Реализация и регистре сведений с ценами для справочника Номенклатура.

К публикации присоединены 2 файла: скрипт создания БД на MS SQL и файл выгрузки БД 1С 8.3.

Порядок работы:

  1. Создаем скриптом базу данных для поиска. Рекомендую использовать скрипт, т.к. он создает и таблицу в БД, структура которой нужна для базы 1С из нашего примера. Скрипт нужно будет подправить в части пути к файлам на SQL сервере.
  2. Переводим свойство базы (базы MS SQL) Collation  в Cyrrilic_CI_AS, как у всех БД 1С.
  3. Создаем новый логин в MS SQL с авторизацией SQL и делаем его владельцем (dbo) для нашей базы.
  4. Разворачиваем БД 1С.
  5. Настраиваем в ней строку соединения с внешней базой данных Полнотекстовый поиск \ Сервис \ Строка соединения с базой полнотекстового поиска.  Строка соединения будет иметь вид: Provider=SQLOLEDB.1;Password=Пароль;Persist Security Info=True;User ID=Пользователь;Initial Catalog=ПолнотекстовыйПоиск;Data Source=СерверБД. Где Пароль и Пользователь – данные учетки, которую мы создали в MS SQL, СерверБД – сервер MS SQL и ПолнотекстовыйПоиск – имя внешней БД с данными для полнотекстового индексирования.
  6. Теперь зайдем в Объекты для поиска \ Создание тестовых данных. Эта обработка может создать тестовые данные или зарегистрировать в плане обмена уже имеющиеся. В скачанной вами копии базы данные есть, поэтому выберем кнопку Перерегистрировать.
  7. Зайдем в Полнотекстовый поиск \ Выгрузить значения для полнотекстового поиска вручную. Эта команда выгрузит во внешнюю базу данных все объекты зарегистрированные в специальном плане обмена согласно справочнику НастройкиПолнотекстовогоПоиска.
  8. Теперь самое время зайти в нашу таблицу и проверить, попали ли в нее данные из базы 1С. Если таблица заполнена, значит вы все сделали верно, если нет – нужно проверять, почему это не произошло.
  9. Теперь создадим полнотекстовый индекс и хранилище для него в MS SQL. Для этого в MS SQL management studio развернем структуру созданной БД и в контекстном меню нашей единственной таблицы выберем пункт Full Text Index \ Define full text index. В качестве уникального индекса нужно указать созданный скриптом PK_FullTextValues, в качестве индексируемой колонки – PropertyValue, от автоматической регистрации изменений откажемся и установим Track changes в Manual, для нашей работы авторегистрация не нужна, а в дальнейшем – сами решите, как вам пересчитывать полнотекстовый индекс. Далее укажите имя каталога для хранения полнотекстовых данных. Регламенты для заполнения тоже указывать не нужно. В результате в вашей базе в Storage \ Full text catalog должен появиться объект, имя которого вы только что задали.
  10. Теперь заполним полнотекстовый индекс, для этого в контекстном меню нашей базы выберем Full Text Index \ Start Full Population.
  11. Теперь перейдем в нашей базе 1С в Полнотекстовый поиск \ Полнотекстовый поиск (SQL) и введем часть строки, скопированной из табличной части реализации или полного наименования номенклатуры. Обработка выведет данные в формате таблицы HTML с подсветкой слов, которые она нашла. Так же обработка выдаст цены на номенклатуру, из реализаций или регистра с ценами.
  12. Обработку поиска можно настраивать, для этого нужно зайти в Еще \ Настройки полнотекстового поиска. На этой закладке можно настроить предметную область поиска, число записей на страницу, интервал пропуска сразу нескольких страниц при перелистывании и минимальную длину слова для поиска.

Все, удачных экспериментов!

Требования к ПО:

  1. 1С 8.3.8
  2. MS SQL 2012. (можно использовать и более ранние варианты, но тогда в обработке полнотекстового поиска придется заменить Offset и Fetch next на альтернативные выборки, например с использованием функции Count).

Пример настройки полнотекстового поиска скриптаим можно посмотреть тут: http://www.sql.ru/faq/faq_topic.aspx?fid=426

Вступайте в нашу телеграмм-группу Инфостарт

Полнотекстовый поиск

См. также

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 1С 8.3 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

Полный контроль над изменениями в 1С без нагрузки на вашу базу. Мгновенный доступ к истории изменений, удобное сравнение и откат данных в один клик. Простой отчет с визуальным отображением изменений Откат на любую версию объекта в два клика История изменения данных хранится во внешней базе

180000 руб.

05.09.2025    1777    1    1    

3

Поиск данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

13200 руб.

14.05.2012    165201    353    253    

586

Поиск данных 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Расширение добавляет возможность в 1С в любых полях и отборах выбирать значения не только Код, Наименование или Номер, но и Уникальный идентификатор, Навигационную ссылку, Объект не найден, Представление документа.

2 стартмани

18.08.2025    6295    35    sapervodichka    14    

75

Поиск данных ЭДО и ОФД Подбор и обработка объектов 1С:Предприятие 8 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Поиск номенклатуры при сопоставлении в ЭДО не интуитивный, не настраиваемый и просто неудобный. Данное решение - это альтернативный вариант расширенного поиска и сопоставления номенклатуры для 1С, который подключается в качестве расширения и решает эту проблему.

10000 руб.

10.04.2025    1521    1    1    

1

Математика и алгоритмы Инструментарий разработчика Универсальные функции Поиск данных Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Абонемент ($m)

Несколько упакованных в один класс интерфейсов для обработки популярных универсальных коллекций. Для тех, кого раздражает отсутствие действительно единого интерфейса для универсальных коллекций.

5 стартмани

25.09.2024    4407    5    Артано    14    

21

Поиск данных Программист 1С:Предприятие 8 Россия Бесплатно (free)

В этой статье я хочу рассмотреть еще один кейс применения Clickhouse в связке с 1С - оптимизацию поиска в справочнике по ключевым словам. Здесь не будет готового решения, но будут описаны важные моменты, которые позволят легко применить данный кейс в реальности.

18.08.2024    3870    1cnik2    23    

19

Поиск данных Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Отображение и просмотр реквизитов справочника или документа - с бесконечным открытием подуровней.

2 стартмани

14.06.2024    5952    13    RustIG    33    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4886 24.02.20 10:43 Сейчас в теме
Почему-то не плюсуется, жму, и ноль реакции. Плюс этой статье!
Silenser; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация