Всем привет.
вопрос на тему полнотекстового поиска.
необходимо изменить какие-то параметры в sql (изменить настройки в SQL Management STUDIO - база, хранимые процедуры, etc). чтобы порции текста, которые выдает система полнотекстового поиска в 1С по текстовым файлам стали больше (нужно чтобы в этот кусок заведомо входило предложение полностью, для возм. его анализа).
(1) Вы скорее всего знаете в каком массиве искать, ведь так?
Ну так и о регулярных выражениях не могли не слышать, верно?
Вы не умеете регулярками искать на SQL?
Идете в IT отдел, находите парня помоложе и говорите ему "слышь пацан, хочешь з/п как у твоего начальника?". Он, ясное дело, сразу соглашается. И Вы ему ставите задачу:
- наколбась на шарпе поисковичек регулярками по примеру http://infostart.ru/public/355500/ - напиши на 1ссы интерфейсик к нему
Он все делает, а Вы ему просто премию разок этак и можно забывать неприятный случай.
(3) alexlights, в конфигурации 1С документооборот 8, формат базы MS SQL Server
обработка полнотекстовый поиск данных, допустим, берем ключевое слово "сумма" и делаем по нему поиск.
результаты выдаются списком, для текстовых файлов идет расшифровка вида:
Текст: Технические условия», стоимость оборудования – Сумма Валюта Срок аренды оборудования составляет: , с...
Длина этого фрагмента фиксированная. Нужна возможность его увеличения
Если в общем виде индексы разбросаны по разным таблицам, то конкретно для объекта
Справочник Файлы, Версии файлов для файлов которые поддаются индексированию (из них извлекается текст).
Немного непонятно чего тебе хочется.
У 1С собственный механизм полнотекстового поиска.
Это можно пронаблюдать, поизучать в обработке "Поиск данных", которая присутствует во всех конфигурациях (я везде находил).
Единтвеное что вообще можно изменить в этом случае:
чтобы порции текста... стали больше
Это в строке-шаблоне для поиска указать:
РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами.
РЯДОМ(NEAR) - упрощенный оператор дистанции: оба слова расположены не далее, чем в 8-ми словах друг от друга; пример: "проведение РЯДОМ документ";
Это как раз изменит "длину фрагментов выдаваемым стандартным полнотекстовым поиском".
Можно найти в встроенной справке по ключу "МенеджерПолнотекстовогоПоиска" Метод "Создать список".
Да, вы же уже создали индекс для полнотекстового поиска?
UPD ну да.. что-то же уже находится, просто результат не удовлетворяет
А что анализиовать? Там уже есть
! - поиск с учетом синонимов русского, английского и украинского языков. "!" ставится перед соответствующим словом; пример: поиск "!красный кафель", найдет еще и "алый кафель" и "коралловый кафель".
и не менее вкусное:
# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";
В каталоге 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.Значение = "Больший кусок текста из найденного объекта".
(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>
(8) graphbuh, я понял, Вам нужно решение "на коленке".
переделайте процедуру поиска, когда оно отображает результат, то вынимайте исходный текст и бомбите его регуляркой, чтоб выдрать нужный фрагмент в достаточном объеме.
Я могу из выборки 1С взять объект и уже из него текст, извлеченный на сервере, но это уже не будет поиск, как я понимаю.
Это будет поиск источников данных. Объекты то найдет встроенный механизм, по индексу. Это быстро. Для полчения искомого куска текста, придется объект развернуть (чем бы он не был). Это накладно. Если накладные расходы по барабану - можно так и оставить. Накладные расходы признаете дорогими - придется делать свой индекс, elasticsarch-ом, mongodb, плоскими файлами? Berkeley DB (XML?) на худой конец. Делать придется, поскольку управлять выдачей встроенного механизма не получится (по крайней мере справедливо для MsSQL, для остальных не интересовался). Изменить сам запрос - не получится.
Изменить процедуру выдачи результата - запросто. Часа 2-4 работы.
Прикрутить свой механизм, фактически в той-же процедуре - да как опкодами.. дольше раза в три-пять. Там не придется описывать пользовательский интерфейс кстати, так-что может и гораздо быстрее.
Прошло почти 3 месяца, неужели задача может быть ещё актуальна? Меня это удивляет.
Что до платных топиков. Это неплохой инструмент мотивировать поделиться знаниями и опытом, иногда пусть и исключительно ментальным. Я своим поделился. Это было так давно. Вы бы как лицо заинтересованное в топике почаще появлялись.
Чем сообщество может помочь, на данном этапе, в связи с открывшимися обстоятельствами, при решении трабла?
(25) fzt, задача актуальна, т.к. в основе лежит мое любопытство. И я естественно в первые же часы как раз и прикрутил процедуру искомого поиска к извлеченном тексту объекта. И естественно все медленно работает.
(27) graphbuh, любопытство разделяю. "Лениво" внедряю документооборот и мне так-же хочется несколько другого поиска, к моменту когда я туда пущю 200 юзеров. Пока обкатываю на офис-менеджерах, и мне захотелось предоставить, в том числе, больше текста при поиске. Мои руки пока не взялись плотно за это.
Смотрел это:
https://infostart.ru/public/338416/ мне понравилось, буду пробовать.
до кучи:
http://habrahabr.ru/post/122531/ А так можно использовать snowball, который поддерживает русский язык. Т.е. можно сделать клевый нечеткий поиск.
http://snowball.tartarus.org/algorithms/russian/stemmer.html Но это очень много работы. Если мне попадется решение пусть тормознее, но проще - незамедлительно воспользуюсь.
Я могу из выборки 1С взять объект и уже из него текст, извлеченный на сервере, но это уже не будет поиск, как я понимаю.
Именно это я и предложил. Даже указал конкретную строчку кода, где это сделать)
но это уже не будет поиск, как я понимаю.
Не скажи. Будет обработана выборка найденных объектов. Вполне нормально. По факту ты получиш из базы найденные файлы для этого, но это будет "на сервере".
Ну и написать регулярку.
Твоих слов про косметику я не понял.
Более чем уверен, что служба полнотекстового поиска не хранит запросы в виде хранимок, а каждый раз генерирует. Соответственно нет никакой возможности поменять эти запросы. Вариант изучать, фактически на кофейной гуще эти запросы и писать для их отлова триггер (чтобы подменить выборку) я бы не стал.
В БД при полнотекстовом поиске служба должна лезть. Хотя-бы потому, что ты наверняка не закомментировал обновление полнотекстового индекса в обработке поиска.
(9) fzt, вы пишите...
служба полнотекстового поиска не хранит запросы в виде хранимок, а каждый раз генерирует. Соответственно нет никакой возможности поменять эти запросы
...неясно, почему нельзя их "поймать" после генерации и заменить длину строки найденного текста, которая должна быть явна задана в этих запросах.
//прогресс двигают тупые люди, которые не понимают почему что-то нельзя сделать )
Авторы кладут болтовое соединение на выдачу гешефта.
Вроде кириллица и многие слова знакомы, но фраза до мозга не дошла.
Что такое "гешефт"?
Это словосочетание "кладут болтовое соединение" говорит мне о специфичном сленге. Что оно означает?
(18) ture, это все подсознание виноватое, оно шаблон не подобрало, а мыслить лень было. Отсюда и коитус с детектом лексемы. =) мне претит, повсемесно, близкий к академическому стиль изложения. Что читать, что излогать.
Учитывая, что буквы и цифры сами по себе, очень скудный инструмент передачи мысли. Стоит ли усугублять передачу скукой, что понизит мотивацию к усвоению информации. Плохо усвоил - труден анализ. Скучно.
(17) fzt, cпасибо за участие, в данный момент также чувствую разочарование в формате платного топика. Люди пишут гипотезы или даже просто комменты, за которые списывают бабки, а решения (которое мне нужно) нет. Еще раз: нужно конкретное решение конкретной задачи. Если $m вознаграждения недостаточно - пишите в личку, обсудим.
(21) у вас фиговый анализ, неправильный вопрос, неправильное видение результата и вы хотите вместо предположений готовый результат.
Повторюсь - полнотекстовым индексом в 1с вы не можете управлять, ни добавить морфологию, ни добавить свой анализ текста и т.д., единственное что можете это "обновить индекс" и молиться, что-бы через время он опять полностью не слетел и на 32 битном сервере у вас хватило памяти на обновление индекса.
Буквально пол года назад на каком та из форумов попадалось готовое решение увеличения выводимой информации для полнотесктового поиска. если найду. обязательно скину.