изменение алгоритма полнотексового поиска (sql,1с83, 1С документооборот)

1. graphbuh 254 19.03.15 16:29 Сейчас в теме
Всем привет.
вопрос на тему полнотекстового поиска.
необходимо изменить какие-то параметры в sql (изменить настройки в SQL Management STUDIO - база, хранимые процедуры, etc). чтобы порции текста, которые выдает система полнотекстового поиска в 1С по текстовым файлам стали больше (нужно чтобы в этот кусок заведомо входило предложение полностью, для возм. его анализа).
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
23. ture 606 20.05.15 17:50 Сейчас в теме
(1) Вы скорее всего знаете в каком массиве искать, ведь так?
Ну так и о регулярных выражениях не могли не слышать, верно?
Вы не умеете регулярками искать на SQL?

Идете в IT отдел, находите парня помоложе и говорите ему "слышь пацан, хочешь з/п как у твоего начальника?". Он, ясное дело, сразу соглашается. И Вы ему ставите задачу:
- наколбась на шарпе поисковичек регулярками по примеру http://infostart.ru/public/355500/
- напиши на 1ссы интерфейсик к нему
Он все делает, а Вы ему просто премию разок этак и можно забывать неприятный случай.

Дело прям смешное.
graphbuh; +1 Ответить
2. pumbaE 19.03.15 16:55 Сейчас в теме
Разве 1с индекс хранить в sql?
Lama12-1; IvanBoychuk123; graphbuh; +3 Ответить
3. alexlights 19.03.15 17:14 Сейчас в теме
А можно как - то более подробно и четче описать задачу? А то пока немного не ясно, что Вы хотите настроить и что получить
5. graphbuh 254 25.03.15 22:30 Сейчас в теме
(3) alexlights, в конфигурации 1С документооборот 8, формат базы MS SQL Server
обработка полнотекстовый поиск данных, допустим, берем ключевое слово "сумма" и делаем по нему поиск.
результаты выдаются списком, для текстовых файлов идет расшифровка вида:

Текст: Технические условия», стоимость оборудования – Сумма Валюта Срок аренды оборудования составляет: , с...

Длина этого фрагмента фиксированная. Нужна возможность его увеличения
Если в общем виде индексы разбросаны по разным таблицам, то конкретно для объекта
Справочник Файлы, Версии файлов для файлов которые поддаются индексированию (из них извлекается текст).
Прикрепленные файлы:
4. fzt 25.03.15 06:07 Сейчас в теме
Немного непонятно чего тебе хочется.
У 1С собственный механизм полнотекстового поиска.
Это можно пронаблюдать, поизучать в обработке "Поиск данных", которая присутствует во всех конфигурациях (я везде находил).
Единтвеное что вообще можно изменить в этом случае:
чтобы порции текста... стали больше

Это в строке-шаблоне для поиска указать:
РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами.

РЯДОМ(NEAR) - упрощенный оператор дистанции: оба слова расположены не далее, чем в 8-ми словах друг от друга; пример: "проведение РЯДОМ документ";


Это как раз изменит "длину фрагментов выдаваемым стандартным полнотекстовым поиском".

Можно найти в встроенной справке по ключу "МенеджерПолнотекстовогоПоиска" Метод "Создать список".

Да, вы же уже создали индекс для полнотекстового поиска?
UPD ну да.. что-то же уже находится, просто результат не удовлетворяет

А что анализиовать? Там уже есть
! - поиск с учетом синонимов русского, английского и украинского языков. "!" ставится перед соответствующим словом; пример: поиск "!красный кафель", найдет еще и "алый кафель" и "коралловый кафель".

и не менее вкусное:
# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";
6. graphbuh 254 25.03.15 22:32 Сейчас в теме
(4) fzt, О том, что сам могу создать индекс знаю, но делать эту работу не хочу, пока не будет убеждения, что по другому нельзя.
7. fzt 26.03.15 08:33 Сейчас в теме
Так. Понятно что непонятно.
Ты можешь остановить службу MSSQSL FullTextSearch, а полнотекстовый поиск в 1С продолжит работу. Смекаеш? ©
Данные вообще не в MSSQL хранятся.
В каталоге 1Cv8FTxt хранятся данные, используемые службой полнотекстового поиска. Они располагаются на компьютере центрального сервера 1С:Предприятия в каталоге <рабочий каталог кластера>/<идентификатор информационной базы>. Например: C:/Program Files/1cv82/server/reg_1541/7eac7609-c0cb-4701-83cf-9ff5f8961de8/1Cv8FTxt.
ИТС
Там есть даже файлик с названием indexMain.bin
Вот такой идиотизм Имеем то, что имеем.

Поэтому народ так невозбранно подключает всякие ElasticSearch и для полнотекстовго поиска в том числе. Это мм.. неглубоко внедрено в конфигурацию. Этот тип поиска по факту нигде не используется в стандартных конфигурациях (кроме встроенной справочной системы).

Но чисто практически твою задачу можно решить тем что имеется. В документообороте обработка ПОлнотекстовыйПоискВДанных
Функция
&НаСервере
Функция ПолучитьHTMLТекст(СписокПоиска)

Ничто не мешает из найденного объекта забрать собственно текст.
В строчке
ЗаписьXML.ЗаписатьТекущий(XML);
Этот XML несколько доработав, для

КОгда XML.ЛокальноеИмя = "#text"
XML.Значение = "Больший кусок текста из найденного объекта".
8. graphbuh 254 31.03.15 15:17 Сейчас в теме
(7) fzt,
как ни крути мы имеем на точке входа (результат поиска) такой вот кусок (в том или ином виде): см. ниже.
задача сделать эти фрагменты больше, например, каждый фрагмент - 256 символов. А не заниматься косметическим преобразованием. я запускал запись лога того что делает сам sql в момент поиска.
он однозначно обращается к таблицам. Хотя не берусь утверждать что выдаваемый текст он берет именно из этих запросов.
Я могу из выборки 1С взять объект и уже из него текст, извлеченный на сервере, но это уже не будет поиск, как я понимаю.


<td class="index">4.
</td>
<td>
<div class="presentation">Файл: Urtrete-01</div>
<div class="textPortion">Текст: ...это текст который мы ищем. он не большой длины
, вот. С <span class="color">длины</span> Нужен текст большей длины <span class="color">Тра-тата</span> Другой кусок текста"<span class="color">Ключевое слово 2</span> последний фрагмент...</div>
<div class="description">
Папка: Документооборот\ txt \ Проекты договоров\ txt \ Тексты файлов</div>
</td>
</tr>
24. ture 606 06.06.15 13:46 Сейчас в теме
(8) graphbuh, я понял, Вам нужно решение "на коленке".
переделайте процедуру поиска, когда оно отображает результат, то вынимайте исходный текст и бомбите его регуляркой, чтоб выдрать нужный фрагмент в достаточном объеме.
25. fzt 08.06.15 09:16 Сейчас в теме
(8) graphbuh,
Я могу из выборки 1С взять объект и уже из него текст, извлеченный на сервере, но это уже не будет поиск, как я понимаю.

Это будет поиск источников данных. Объекты то найдет встроенный механизм, по индексу. Это быстро. Для полчения искомого куска текста, придется объект развернуть (чем бы он не был). Это накладно. Если накладные расходы по барабану - можно так и оставить. Накладные расходы признаете дорогими - придется делать свой индекс, elasticsarch-ом, mongodb, плоскими файлами? Berkeley DB (XML?) на худой конец. Делать придется, поскольку управлять выдачей встроенного механизма не получится (по крайней мере справедливо для MsSQL, для остальных не интересовался). Изменить сам запрос - не получится.

Изменить процедуру выдачи результата - запросто. Часа 2-4 работы.
Прикрутить свой механизм, фактически в той-же процедуре - да как опкодами.. дольше раза в три-пять. Там не придется описывать пользовательский интерфейс кстати, так-что может и гораздо быстрее.

Прошло почти 3 месяца, неужели задача может быть ещё актуальна? Меня это удивляет.

Что до платных топиков. Это неплохой инструмент мотивировать поделиться знаниями и опытом, иногда пусть и исключительно ментальным. Я своим поделился. Это было так давно. Вы бы как лицо заинтересованное в топике почаще появлялись.

Чем сообщество может помочь, на данном этапе, в связи с открывшимися обстоятельствами, при решении трабла?
27. graphbuh 254 08.06.15 09:59 Сейчас в теме
(25) fzt, задача актуальна, т.к. в основе лежит мое любопытство. И я естественно в первые же часы как раз и прикрутил процедуру искомого поиска к извлеченном тексту объекта. И естественно все медленно работает.
29. fzt 09.06.15 09:17 Сейчас в теме
(27) graphbuh, любопытство разделяю. "Лениво" внедряю документооборот и мне так-же хочется несколько другого поиска, к моменту когда я туда пущю 200 юзеров. Пока обкатываю на офис-менеджерах, и мне захотелось предоставить, в том числе, больше текста при поиске. Мои руки пока не взялись плотно за это.
Смотрел это:
https://infostart.ru/public/338416/
мне понравилось, буду пробовать.
до кучи:
http://habrahabr.ru/post/122531/
А так можно использовать snowball, который поддерживает русский язык. Т.е. можно сделать клевый нечеткий поиск.
http://snowball.tartarus.org/algorithms/russian/stemmer.html
Но это очень много работы. Если мне попадется решение пусть тормознее, но проще - незамедлительно воспользуюсь.
9. fzt 01.04.15 16:00 Сейчас в теме
Я могу из выборки 1С взять объект и уже из него текст, извлеченный на сервере, но это уже не будет поиск, как я понимаю.

Именно это я и предложил. Даже указал конкретную строчку кода, где это сделать)
но это уже не будет поиск, как я понимаю.

Не скажи. Будет обработана выборка найденных объектов. Вполне нормально. По факту ты получиш из базы найденные файлы для этого, но это будет "на сервере".
Ну и написать регулярку.

Твоих слов про косметику я не понял.

Более чем уверен, что служба полнотекстового поиска не хранит запросы в виде хранимок, а каждый раз генерирует. Соответственно нет никакой возможности поменять эти запросы. Вариант изучать, фактически на кофейной гуще эти запросы и писать для их отлова триггер (чтобы подменить выборку) я бы не стал.

В БД при полнотекстовом поиске служба должна лезть. Хотя-бы потому, что ты наверняка не закомментировал обновление полнотекстового индекса в обработке поиска.
10. graphbuh 254 02.04.15 11:23 Сейчас в теме
(9) fzt, вы пишите...
служба полнотекстового поиска не хранит запросы в виде хранимок, а каждый раз генерирует. Соответственно нет никакой возможности поменять эти запросы

...неясно, почему нельзя их "поймать" после генерации и заменить длину строки найденного текста, которая должна быть явна задана в этих запросах.
//прогресс двигают тупые люди, которые не понимают почему что-то нельзя сделать )
11. pavelyar 02.04.15 14:13 Сейчас в теме
Задача что то не ясна,зачем это делать?
12. graphbuh 254 05.04.15 21:52 Сейчас в теме
(11) pavelyar, задача ясна. Если вы не знаете как ее решить, лучше ничего не писать )
13. fzt 06.04.15 06:08 Сейчас в теме
неясно, почему нельзя их "поймать" после генерации и заменить длину строки найденного текста, которая должна быть явна задана в этих запросах

Я незнаю твоей квалификации вне скриптового мира 1С. Опохмелиться было всё-таки можно © Пелевин
Варианты вообще выполнимые в той или иной степени:
0) Давно все сделать как я предложил. Минус, повышенная прожорливость памяти механизма поиска. "Лишние" обращения к БД.
1) OllyDBG отлаживаем процесс полнотекстового поиска, ищем откуда эта цкатина берет длинну текста, модифицируем. Минус первый, идет нафиг лицензионное соглашение, но меня это мало беспокоит. Не палится. Минус второй, после обновления платформа служба можем обновиться. Пожалуй второй может заставить это не делать. В какой dll это дело я не разбирался, быть может BkEnd.dll
2) Настряпать собственную dll и в ней перехватывать API функции. С разгону не скажу какую конкретно придется сплайсить.
3) Поставить проксик с возможностью подмены пакетов. Поскольку нам вероятно придется менять число разрядности ХХХ, все выглядит просто.
4) Попытаться изменить запрос самим MSSQL, ну тут подозреваю от версии сервера зависит. Лично мне так задача нестояла и я так не делал, но подозреваю что "всё-таки можно".
14. pumbaE 06.04.15 08:30 Сейчас в теме
(13) резюмируя, проще elasticsarch прикрутить.
15. Dodzh 08.04.15 12:01 Сейчас в теме
А мы в УТ по старинке через Ctrl+F
Частенько быстрей получается.
16. ture 606 03.05.15 22:31 Сейчас в теме
Ищите регулярными выражениями в текстовом файле с содержимым документа.
17. fzt 19.05.15 10:22 Сейчас в теме
Что-то последнее время не вижу смысла отвечать в платных топиках. Авторы кладут болтовое соединение на выдачу гешефта.
Нужно что-то опубликовать.
dj_serega; pumbaE; +2 Ответить
18. ture 606 19.05.15 13:30 Сейчас в теме
(17)
 Авторы кладут болтовое соединение на выдачу гешефта.

Вроде кириллица и многие слова знакомы, но фраза до мозга не дошла.
Что такое "гешефт"?
Это словосочетание "кладут болтовое соединение" говорит мне о специфичном сленге. Что оно означает?
19. pumbaE 19.05.15 13:37 Сейчас в теме
(18) ture,
„Wie viele Sprachen du sprichst, sooftmal bist du Mensch.“ (J.W. Goethe)
fzt; ture; +2 Ответить
20. ture 606 19.05.15 13:40 Сейчас в теме
(19) pumbaE, А понял "гешефт" здесь вознаграждение.
26. fzt 08.06.15 09:32 Сейчас в теме
(18) ture, это все подсознание виноватое, оно шаблон не подобрало, а мыслить лень было. Отсюда и коитус с детектом лексемы. =)
мне претит, повсемесно, близкий к академическому стиль изложения. Что читать, что излогать.
Учитывая, что буквы и цифры сами по себе, очень скудный инструмент передачи мысли. Стоит ли усугублять передачу скукой, что понизит мотивацию к усвоению информации. Плохо усвоил - труден анализ. Скучно.
21. graphbuh 254 19.05.15 15:33 Сейчас в теме
(17) fzt, cпасибо за участие, в данный момент также чувствую разочарование в формате платного топика. Люди пишут гипотезы или даже просто комменты, за которые списывают бабки, а решения (которое мне нужно) нет. Еще раз: нужно конкретное решение конкретной задачи. Если $m вознаграждения недостаточно - пишите в личку, обсудим.
22. pumbaE 19.05.15 17:07 Сейчас в теме
(21) у вас фиговый анализ, неправильный вопрос, неправильное видение результата и вы хотите вместо предположений готовый результат.

Повторюсь - полнотекстовым индексом в 1с вы не можете управлять, ни добавить морфологию, ни добавить свой анализ текста и т.д., единственное что можете это "обновить индекс" и молиться, что-бы через время он опять полностью не слетел и на 32 битном сервере у вас хватило памяти на обновление индекса.
28. Зеленоград 08.06.15 17:45 Сейчас в теме
Dolter писал свой полнотекстовый поиск, ищи на Vakhrin.com
30. developerphp 16.06.15 14:55 Сейчас в теме
Буквально пол года назад на каком та из форумов попадалось готовое решение увеличения выводимой информации для полнотесктового поиска. если найду. обязательно скину.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)