Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 28, April, 2008 16:58

Приветствую.

Я сделал так:

В чистую базу залил с 1 по 10 записей из БД книг. потом еще с 1 по 5 - то бишь пять дублетов (без ФЛК и автоввода, чтобы они существовали в БД)
Затем в фст прописал: if &uf('J,',&uf('+1R66'))>'1' then 'ALLDUBL=1' fi
где +1R66 - это строка отвечающая за оригинальность, формирующаяся в строке 999 0 (первая которая я туда добавил запись в переменную):

if p(v200^a)and a(v981)and a(v463)and (not(v920:'spec'))then &uf('+1W66#','!'v110^b,v11^a,if v210^d.1='['then else v210^d*2.2fi,v700^a.9,&unifor('B'v710^a" ",v200^a),if v920='J'then" "v923^h,if a(v923^h) then" "v923^i fi," "v923^k,if a(v923^k) then" "v923^l fi," "v923^m,if a(v923^m) then" "v923^n fi fi,if v920='J'then else (if val(v923^h)>0 then &unifor('G1#'v923^h) else v923^h fi,if val(v923^k)>0 then &unifor('G1#'v923^k) else v923^k fi) fi,v215^a ), &uf('+1R66')fi

Что должно быть (как я думал):
То бишь получается по логике должно попасть 5 ссылок в этот словарь - только последние пять записей.

Что получилось:
У меня попадает 10 - первые пять и последние пять - дублетные записи и их "оригиналы".

Мысли по поводу:
Когда формируется словарь, первая запись создает в словаре первую ссылку - она не может знать, что потом появится дублетная запись....

Вопрос:
Как на самом деле формируется словарь по fst - в каком порядке?

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 28, April, 2008 17:17

При создании словаря заново ни о какой проверки на дублетность не может идти речь. Проверка на дублетность - это задача ФЛК!

Re: Последовательность создания словаря
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 28, April, 2008 22:28

Александр Иосифович. Откройте, пожалуйста, тайну, почему данная ситуация так проявляется? Я, например, тоже всегда считал, что так делать можно. Просто руки не доходили попробовать.

Вопрос все-таки звучит так:
Каков алгоритм формирования словаря базы?

ЗЫ. Хотя я, кажется, начинаю понимать. Коли мы создаем словарь базы, а последовательность его создания
- выборка
- сортировка
- загрузка
, то при выборке данных из словаря используется старый словарь, который еще не пересоздан и содержит старые значения. От сюда и такой эффект. Да?

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 28, April, 2008 22:49

Alio написал(а):
-------------------------------------------------------
> При создании словаря заново ни о какой проверки на
> дублетность не может идти речь. Проверка на
> дублетность - это задача ФЛК!

В ФЛК используется словарь "!",в котором хранятся ссылки по сверткам.
Моя цель выявить (не просто удалить) дублеты, которые были созданы в старой БД и перенесены в Ирбис.

Но вопрос и правда - только о последовательности и алгоритме. Как выявить я впринципе придумал.

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 29, April, 2008 10:04

iLq написал(а):
-------------------------------------------------------
> Alio написал(а):
> --------------------------------------------------
> -----
> > При создании словаря заново ни о какой проверки
> на
> > дублетность не может идти речь. Проверка на
> > дублетность - это задача ФЛК!
>
> В ФЛК используется словарь "!",в котором хранятся
> ссылки по сверткам.
> Моя цель выявить (не просто удалить) дублеты,
> которые были созданы в старой БД и перенесены в
> Ирбис.
>
Это можно сделать двумя способами:
- делать соотвествующую глобальную корректировку на всю БД (полностью загруженную)
- делать импорт всей БД в АРМе Каталогизатор с включенным ФЛК.

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 29, April, 2008 13:00

В таком случае, как я понимаю, он просто их удалит.

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 29, April, 2008 13:13

iLq написал(а):
-------------------------------------------------------
> В таком случае, как я понимаю, он просто их
> удалит.
Во втором случае - да.
А в первом - это Ваше дело, что делать с дублетами...

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 29, April, 2008 13:26

Вас понял. Но мы чуть отвлеклись от первоначального вопроса:

Как на самом деле формируется словарь по fst - в каком порядке?

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 29, April, 2008 13:55

iLq написал(а):
-------------------------------------------------------
> Вас понял. Но мы чуть отвлеклись от
> первоначального вопроса:
>
> Как на самом деле формируется словарь по fst - в
> каком порядке?
Если речь идет о создании словаря заново, то все очень просто. Процесс состоит из трех этапов:
- ОТБОР - состоит в том, что ВСЕ записи (последовательно в соответствии с MFN) прогоняются через ТВП инвертирования и на основании результатов расформатирования строятся ссылки (создается список несортированных ссылок). При этом, если в форматах есть обращения в словарь (чего, как я уже говорил, в общем случае НЕ ДОЛЖНО БЫТЬ), то используется СУЩЕСТВУЮЩИЙ (старый) словарь.
- СОРТИРОВКА - список ссылок сортируется;
- ЗАГРУЗКА - из сортированного списка создается новый словарь (старый, разумеется, полностью удаляется)

Если же говорить о процессе актуализации конкретной (измененной) записи, то этот процесс "хитрее":
- через ТВП переформатирования прогоняется СТАРАЯ (предыдущая) копия данной записи и формируется (в памяти) список "старых" ссылок;
- то же самое делается для НОВОЙ (последней) копии данной записи и формируется (в памяти) список "новых" ссылок;
- списки "старых" и "новых" ссылок сравниваются: "старые" ссылки, отсутствующие среди "новых", удаляются из словаря, а "новые" ссылки, отсутствующие среди "старых" добавляются в словарь.

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 29, April, 2008 16:21

Понял. Спасибо большое.
Опять я перемудрил с обращением к словарю в создании словаря :)

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 30, April, 2008 15:02

Вдогонку небольшой вопрос по дублетам:
При импорте с ФЛК дублетные записи удаляются из за результата '1'?
Не доходя до автоина?

То есть если мне при импрте необходимо "заменить" старые записи новыми, лучше импортировать без ФЛК и в автоине прописать сравнение по словарю "!" и удаление через CORREC+DELR ? правильно?

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 30, April, 2008 15:45

iLq написал(а):
-------------------------------------------------------
> Вдогонку небольшой вопрос по дублетам:
> При импорте с ФЛК дублетные записи удаляются из за
> результата '1'?
> Не доходя до автоина?
Именно так.
>
> То есть если мне при импрте необходимо "заменить"
> старые записи новыми,
Вам следует применять ИМПОРТ СО СЛИЯНИЕМ (Арм Каталогизатор-ИМПОРТ)

лучше импортировать без ФЛК
> и в автоине прописать сравнение по словарю "!" и
> удаление через CORREC+DELR ? правильно?

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 04, May, 2008 15:03

Alio написал(а):
-------------------------------------------------------
> Вам следует применять ИМПОРТ СО СЛИЯНИЕМ (Арм
> Каталогизатор-ИМПОРТ)

Не вижу правильного применения импорта со слиянием в данном случае.
Случай какой: из Марса пришли росписи статей за какой-то номер журнала. Затем оказалось, что там была допущена ошибка и приходит снова набор этих росписей из этого номера журнала. Мне легче удалить старые росписи, и загрузить новые исправленные.
То есть я хотел, чтобы во время импорта находился старый дублет и удалялся из базы, а новая запись импортировалась дальше.

Или для данного случая все же лучше "импорт со слиянием"?

Но так как я все же начал через автоин делать, возни такой вопрос:

При глобальной корректировке актуализация измененной записи оператором CORREC происходит сразу же после применения оператора, или сначала сохраняется запись на которой происходит глобальная корректура, и потом актуализируется словарь для запии измененной оператором CORREC и затем записи, изменяемой глабльной корректурой?

То бишь я:
- импортирю запись без флк,
- автоин делает следующее:
- с помощью CORREC вискивает по словарю ! дублетную запись-оригинал
- удаляет её
Но при тестировании на отдельных запиях с помощью глобальной корректировки получаю следуюющее собщение:

"БД - BDAWS: MFN 7: удалена логически: запись откорректирована
БД - BDAWS: MFN 5655: удалена логически: запись откорректирована
БД - BDAWS: MFN 5655: ошибка при записи: -608
Откорректировано записей 2"

То есть я как понял он все еще корректируемую запись ситает дублетом и тоже её удаляет, так?

Re: Последовательность создания словаря
Пользователь: Панев Максим (IP-адрес скрыт)
Дата: 04, May, 2008 17:05

Именно так, поскольку Словарь не пересоздается после каждого оператора глобальной корректировки. А, следовательно, это значит, что термин, указывающий на дублет, после удаления записи все еще на нее указывает.

ЗЫ. Так думаю я :)

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 05, May, 2008 10:06

iLq написал(а):
-------------------------------------------------------
> Случай какой: из Марса пришли росписи статей за
> какой-то номер журнала. Затем оказалось, что там
> была допущена ошибка и приходит снова набор этих
> росписей из этого номера журнала. Мне легче
> удалить старые росписи, и загрузить новые
> исправленные.
> То есть я хотел, чтобы во время импорта находился
> старый дублет и удалялся из базы, а новая запись
> импортировалась дальше.
Это можно реализовать с помощью режима ИМПОРТ СО СЛИЯНИЕМ НА ОСНОВЕ ГЛОБАЛЬНОЙ КОРРЕКТИРОВКИ - т.е. в импорте использовать опцию СЛЯНИЕ - ГЛОБАЛЬНАЯ. Список глобальных дл этого режима находятся в справочнике MERGEGBL.MNU

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 05, May, 2008 11:21

Про слияние в документации сказано очень мало.
На форуме нашел толкового только:
"1. по impsvk.fst импортируемая запись переформатируется
2. по impsvk.pft - на переформатированной импортируемой записи ищется запись в БД; найденная корректируется, не найдено - создается новая
3. в новую запись вносятся ВСЕ данные
4. при корректировке записи действует следующее правило: неповторяющиеся поля заменяются, к повторяющимся приписываются оригинальные (повторение определяется по default.ws)"

Про слияние с глобальной корректировкой не представляю как работает. Расскажите, пожалуйста об алгоритме слияния на основе глобальное корректировке?

Re: Последовательность создания словаря
Пользователь: ochagova (IP-адрес скрыт)
Дата: 05, May, 2008 11:44

Не следила за обсуждением, но хочу уточнить следующий вопрос:

"При глобальной корректировке актуализация измененной записи оператором CORREC происходит сразу же после применения оператора, или сначала сохраняется запись на которой происходит глобальная корректура, и потом актуализируется словарь для запии измененной оператором CORREC и затем записи, изменяемой глабльной корректурой? "

1. В ИРБИС-32. При выполнении CORREC вызванная запись корректируется, сразу пишется, выполняется на ней autoin и актуализация. Так что в форматах задания для основной записи можно использовать факт изменения записи по CORREC в пределах одного задания.
2. В ИРБИС-64. Иначе. Записи, вызванные оператором CORREC корректируются в памяти, только после завершения выполнения задания на очередной основной записи пишутся и актуализируются записи по CORREC, потом основная запись. Так что в форматах задания нельзя пользоваться результатами оператора CORREC

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 05, May, 2008 12:18

iLq написал(а):
-------------------------------------------------------
> > Про слияние с глобальной корректировкой не
> представляю как работает. Расскажите, пожалуйста
> об алгоритме слияния на основе глобальное
> корректировке?
Задание на глобальную корректировку (которое выбирается при слиянии из списка MERGEGBL.MNU) отрабатывает на КАЖДОЙ импортируемой записи - вот собственно и все. В этой глобальной корректировке Вы можете через CORREC выйти на связанную запись и что-то с ней делать.Вот только удалить ее не сможете. Ее можно как-то пометить - с тем чтобы потом с помощью другой глобальной удалить.

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 05, May, 2008 16:05

Что может означать выражение в отчете после импорта со слиянием (с глобальной корректировкой): "Проверьте корректность импорта" ?

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 05, May, 2008 16:24

Это сообщение ФЛК (dbnflc.pft)

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 05, May, 2008 17:00

> Задание на глобальную корректировку (которое выбирается при слиянии из списка MERGEGBL.MNU) отрабатывает на КАЖДОЙ импортируемой записи - вот собственно и все. В этой глобальной корректировке Вы можете через CORREC выйти на связанную запись и что-то с ней делать.Вот только удалить ее не сможете. Ее можно как-то пометить - с тем чтобы потом с помощью другой глобальной удалить.

Но в данном случае остается тот же принцып:
"В ИРБИС-64. Иначе. Записи, вызванные оператором CORREC корректируются в памяти, только после завершения выполнения задания на очередной основной записи пишутся и актуализируются записи по CORREC, потом основная запись. Так что в форматах задания нельзя пользоваться результатами оператора CORREC" ???

У меня пока так же ругается на дублетность при импрте дублетной записи со слиянием с глобальной корректировкой, в которой я хотел, например, поменять название, в результате чего должна была бы измениться свертка "!" ... но этого не происходит...

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 06, May, 2008 15:34

Так же попробовал импортировать со слиянием с глобальной корректировкой, в которой:
- методом CORREC находился дублет по термину словаря "!"
- найденный дублет очищался EMPTY
- и заполнялся вновь ALL

Результат - ничего не поменял (что странно), и импортированную запись как дублет удалил (это впринципе логично).


Но я попробовал загрузить запись дублетную через АДМинистратор без ФЛК, и затем провести над ней эту глобальную корректировку - все получилось нормально - та запись очистилась и заполнилась вновь (так как я предварительно поменял немного поле, которое за дублетность не отвечает).

Встает вопрос - в каком порядке производится импорт и глобальная корректировка, а так же ФЛК?

У меня предположение такое, что запись импортируется, производится ФЛК - находится, что это дублет, удаляется и глобальная корректировка произвестись не успевает. Так ли это?

Неужели мне придется загружать эти записи предварительно в другую базу, чтобы оттуда они проверились на дублетность, и если нет дублета, то скопировались в необходимую базу, а если есть дублет, то удалили бы в необходимой базе старую версию, и остались бы в той базе (временной) до след. глобальной корректировки, которая бы их скопировала в необходимую БД ?

Re: Последовательность создания словаря
Пользователь: Alio (IP-адрес скрыт)
Дата: 06, May, 2008 18:07

> У меня предположение такое, что запись
> импортируется, производится ФЛК - находится, что
> это дублет, удаляется и глобальная корректировка
> произвестись не успевает. Так ли это?
Нет, не так. Сначала выполняется глобальная корректировка слияния, а потом ФЛК.

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 06, May, 2008 23:36

ТОгда непонимаю, почему так происходит:
"Так же попробовал импортировать со слиянием с глобальной корректировкой, в которой:
- методом CORREC находился дублет по термину словаря "!"
- найденный дублет очищался EMPTY
- и заполнялся вновь ALL

Результат - ничего не поменял (что странно), и импортированную запись как дублет удалил (это впринципе логично). "

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 07, May, 2008 09:38

Пришлось все же через дополнительную "перевалочную" базу сделать:
- Загружаю в перевалочную базу,
- в автоине они проверяются на дублетность в БД статей, и если нет дублета, то копируются в базу статей, а если есть дублет, то в базе статей удаляется дублет, и "оригинал" остается в "перевалочной базе до след. глобальной корректировки, которая их копирует в БД статей?

Примерно так ...

Re: Последовательность создания словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 07, May, 2008 12:29

В дистрибутиве есть работающий пример импорта со слиянием, предназначенный для пополнения или корректировки записи сводного каталога с учетом приоритета сигл Impsvk_Sigla.
Он описан достаточно сложно, но хочу обратить внимание на следующее.
1. В Impsvk_Sigla.fst создается поле 1, в которое вносится свертка импортируемой записи (начинающаяся с !), но с предварительной проверкой наличия такой записи в БД по &unifor('J)
2. В Impsvk_Sigla.gbl поле 1 объявляется поисковым в операторе CORREC
Если запись в БД не находится, создается новая запись.
В Вашем случае, когда меняется заглавие, бессмысленно искать аналогичную по свертке запись в БД - Вам нужно объявить поисковым элементом другое, например, ISBN, убедившись предварительно в его уникальности.

Re: Последовательность создания словаря
Пользователь: iLq (IP-адрес скрыт)
Дата: 07, May, 2008 14:29

Дунаевская написал(а):
-------------------------------------------------------
> В Вашем случае, когда меняется заглавие,
> бессмысленно искать аналогичную по свертке запись
> в БД

Почему у меня меняется заглавие?

Если вы про "У меня пока так же ругается на дублетность при импрте дублетной записи со слиянием с глобальной корректировкой, в которой я хотел, например, поменять название, в результате чего должна была бы измениться свертка "!" ... но этого не происходит..." - то это была одна из попыток разобраться в послеовательности обновления словаря при глоб. корректировке в слиянии.

А так - я не меняю никакие названия.

Re: Последовательность создания словаря
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 07, May, 2008 15:12

Да, это мое замечание относится именно к этой Вашей попытке.

Re: Последовательность создания словаря
Пользователь: m081071 (IP-адрес скрыт)
Дата: 24, December, 2009 12:35

Приходится вливать в базу большое количество файлов с записями. Удобнее делать это через администратор. Если я отключаю ФЛК, то записи вливаются все и дублеты не удаляются. Подскажите, пожалуйста, каким образом мне поступить,затратив минимум времени, чтобы периодически чистить базу, удаляя из базы дублетные записи (ранее влитые).Спасибо.



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.