Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/319: Рейтинг темы: голосов - 319, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38

Запрос Для Ftsearch

27.02.2013, 01:56. Показов 65561. Ответов 87
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, возникла необходимость оптимизации работы агента, долго выполняется обновление,при анализе кода было выявлено что большая часть времени тратится на операции поиска
DocumentCollection dc = database.search( "Form =\"Person\" & met!=\"1\" & @IsUnavailable($Conflict) & TabNum= \"" + tabNum + "\"");
DocumentCollection dc = database.search( "(Form =\"Department\" | Form =\"Subdivision\") & @IsUnavailable($Conflict) & met!=\"1\"& ID= \"" + depID + "\"");
DocumentCollection dc = database.search ("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\"");

Если верить интернетам метод FTSearch работает быстрее, но вот любой из этих запросов уже не работает если его вставить в FTSearch:

DocumentCollection dc = database.FTSearch( "Form =\"Person\" & met!=\"1\" & @IsUnavailable($Conflict) & TabNum= \"" + tabNum + "\"");
DocumentCollection dc = database.FTSearch( "(Form =\"Department\" | Form =\"Subdivision\") & @IsUnavailable($Conflict) & met!=\"1\"& ID= \"" + depID + "\"");
DocumentCollection dc = database.FTSearch("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\"");

эти варианты выдают ошибку типа error message: NotesException: Notes error: Query is not understandable ((Form ="Department" Form ="Subdivision") & @IsUnavailable($Conflict) & met!="1"& ID= "1000

Подскажите как правильно написать эти запросы для метода FTSearch или может какие нибудь еще варианты есть поиска ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2013, 01:56
Ответы с готовыми решениями:

запрос для Ftsearch: подскажите как выкрутиться
Ищу документы в БД при помощи Set dc = db.FTSearch(FTQuery, 0, 64,16384), где FTQuery довольно таки большая строка в которой указываю поля...

& @isavailable($conflict) для Ftsearch
Доброго времени. Собственно, вопрос в сабже.

Ftsearch
Здравствуйте. Ломаю голову, наверное не хватает опыта и так есть некая бд в domino в бд порядка 500000 документов. У каждого...

87
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 09:45
Студворк — интернет-сервис помощи студентам
вот тут написано часть: Производительность
Эта ссылка на форуме постоянно мелькает. Можешь почитать все или сразу смотреть {Какие методы самые быстрые?}
А если еще подробнее, то в Lotus базе есть TableID (индекс-хэш всей базы, все документы и stubы) по этой таблице происходит поиск методом GetDocumentByUNID, если я не путаю.
Есть ViewIndex, это хэш-индекс каждого представления, только документов которые в него попадают. Соответственно он меньше и поиск в нем быстрее, это как раз GetDocumentByKey у NotexView.
А вот Search, кажись, берет просто все документ и перебирая их по одному проверяет на формулу, если не подходит - выбрасывает из обработки.
Вот такая забавная архитектура. Если я не прав, то надеюсь формучане меня поправят.
0
0 / 0 / 0
Регистрация: 16.07.2007
Сообщений: 849
28.02.2013, 09:58
Цитата Сообщение от ezhov
происходит синхронизация департаментов и сотрудников, их xml берется тот самый parentID, ищется в базе лотуса и обновляется и т.д., в xmlке куча этих parentID, циклом пробегаемся по всем и для каждого делаем такой поиск,поэтому parentID в каждой итерации цикла разный, он передается в метод, в котором и вызывается поиск по базе, который нужно оптимизировать,что б быстрее искал
Я так и думал)
В данной ситуации не нужно делать 100500 поисков, xlm будет обрабатываться быстрее, делайте наоборот. Получаете все документы которые требуется обработать а потом ищите нужные данные в xml
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 12:19
А получиться ли создать представление с такими выборками?

"Form =\"Person\" & met!=\"1\" & @IsUnavailable($Conflict) & TabNum= \"" + tabNum + "\""
"Form =\"Department\" | Form =\"Subdivision\") & @IsUnavailable($Conflict) & met!=\"1\"& ID= \"" + depID + "\""

Т.е. с использованием в запросе фунций @IsUnavailable($Conflict)?

Просто в коде используется 3 метода search с разными запросами, и это 2 из них, если нельзя создать представление с такими выборками то имеет ли смысл переделывать 1 метод ? будет какой то прирост в скорости ?
0
0 / 0 / 0
Регистрация: 16.07.2007
Сообщений: 849
28.02.2013, 12:35
Можно
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 14:04
Отлично! Тогда надо создавать вьюхи.
Получается мне нужно в лотусе создать 3 view(каждую на свой запрос),как я понял они создаются в Domino Designer или Lotus Notes с помощью меню, и в разделе Selection conditions или Select by formula написать выборки,они будут такими же ?:

Select Form="Department" | Form="Subdivision" & [met]!="1", сюда передается parentID
Select Form ="Person" & met!="1" & @IsUnavailable($Conflict) , сюда передается tabNum
Select Form ="Department" | Form ="Subdivision" & @IsUnavailable($Conflict) & met!="1", сюда передается depID

и потом в коде заменить

DocumentCollection dc = database.search ("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\""); и т.д.
на
DocumentCollection dc = view.GetAllDocumentbyKey(parentId);
DocumentCollection dc = view.GetAllDocumentbyKey(tabNum);
DocumentCollection dc = view.GetAllDocumentbyKey(depID);

Так? я раньше не работал с этими делами, поэтому поправьте пожалуйста синтаксис кода ;) ;)
0
0 / 0 / 0
Регистрация: 16.07.2007
Сообщений: 849
28.02.2013, 14:23
Да, и первую колонку сделать сортированной с нужным параметром (parentID, tabNum).
Если по ключу должен быть один документ то используйте
public Document getDocumentByKey(java.util.Vector keys)
throws NotesException
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.02.2013, 14:25
судя по первоначальным формулам поиска, тебе нужны 2 вьюхи с отбором Select (Form="Department" | Form="Subdivision") & met!="1" и Select (Form ="Department" | Form ="Subdivision") & @IsUnavailable($Conflict) & met!="1" и сортировкой по ID (нельзя ли их в одну объединить, кстати? - отличие только в условии @IsUnavailable($Conflict)) и еще одна вьюха с отбором Select Form ="Person" & met!="1" & @IsUnavailable($Conflict) и сортировкой по TabNum
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 14:33
Цитата Сообщение от ezhov
Так? я раньше не работал с этими делами, поэтому поправьте пожалуйста синтаксис кода
Посмотри скрины. ViewXXX как создать вьюху, ViewXXX_ColumnKey - как задать колонку ключ.
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.02.2013, 14:43
savl не путай человека, сам же писал: "Первая колонка, сортированная, ключ колонки ID".Просто исходя из первого поста, сортированной колонкой должна быть колонка именно с полем ID: depID и parentId это вроде значения, получаемые из xml:
DocumentCollection dc = database.search( "(Form =\"Department\" | Form =\"Subdivision\") & @IsUnavailable($Conflict) & met!=\"1\"& ID= \"" + depID + "\"");
DocumentCollection dc = database.search ("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\"");
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 14:58
OKEN
Не путаю, я писал для одного примера. Если он будет создавать 3 представления (хотя двух достаточно) и использовать их для того чтобы найти документ, то могут возникнуть еще вопросы, вот я и выложил картинки с пояснением: где и как задать формулу отбора, как задать ключ колонки, как сделать ее отсортированной.
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 15:07
Цитата Сообщение от kizarek
Да, и первую колонку сделать сортированной с нужным параметром (parentID, tabNum).
Если по ключу должен быть один документ то используйте
public Document getDocumentByKey(java.util.Vector keys)
throws NotesException
в коде идет проверка на количество совпадений:

<!--shcode--><pre><code class=java>private lotus.domino.Document findByTabNum(String tabNum) throws NotesException {
DocumentCollection dc = database.search(
"Form =\"Person\" & met!=\"1\" & @IsUnavailable($Conflict) & TabNum= \"" + tabNum + "\"");


lotus.domino.Document tmpdoc = null;
lotus.domino.Document doc = dc.getFirstDocument();
int notNull = 0;
if(dc.getCount() == 0) {
return null;
}

if (dc.getCount() == 1)
return dc.getFirstDocument();
else if (dc.getCount() > 1) {
while (doc != null) {
if (!doc.isDeleted()) {
tmpdoc = doc;
notNull++;
continue;
}
doc = dc.getNextDocument();
}
}
if(notNull==1) {
return tmpdoc;
} else {
throw new RuntimeException(
"Error. There are more than one employee in DB with TabNum = " + tabNum + "and they have \"isDeleted=true\" flag");
}

}[/CODE]

Добавлено:


Цитата Сообщение от OKEN
savl не путай человека, сам же писал: "Первая колонка, сортированная, ключ колонки ID".Просто исходя из первого поста, сортированной колонкой должна быть колонка именно с полем ID: depID и parentId это вроде значения, получаемые из xml:
DocumentCollection dc = database.search( "(Form =\"Department\" | Form =\"Subdivision\") & @IsUnavailable($Conflict) & met!=\"1\"& ID= \"" + depID + "\"");
DocumentCollection dc = database.search ("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\"");
Правильно подмечено, у меня как раз такой вопрос возник, depID и parentId это значения, получаемые из xml, они передаются в формулу поиска,но исчутся по полю ID(это в 2х запросах) и по tabNum тут :
database.search( "Form =\"Person\" & met!=\"1\" & @IsUnavailable($Conflict) & TabNum= \"" + tabNum + "\"");
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 15:30
Да, недоглядел.
По поводу того, что идет проверка на совпадения, то смотри метод у View class:
<!--shcode--><pre><code class=java>public DocumentCollection getAllDocumentsByKey(...)
throws NotesException[/CODE]
как раз вернет коллекцию
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 882
28.02.2013, 15:45
А чем один единственный view не устраивает?
С одной колонкой типа:
q1:=@If((Form="Department" | Form="Subdivision") & met!="1";"q1~"+parentID;"");
q2:=@If("Person" & met!="1" & @IsUnavailable($Conflict);"q2~"+tabNum;" ");
q3:=@If((Form ="Department" | Form ="Subdivision") & @IsUnavailable($Conflict) & met!="1";"q3~"+depID;"");
@Trim(q1:q2:q3)
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 15:47
Цитата Сообщение от savl
Да, недоглядел.
По поводу того, что идет проверка на совпадения, то смотри метод у View class:
<!--shcode--><pre><code class=java>public DocumentCollection getAllDocumentsByKey(...)
throws NotesException[/CODE]
как раз вернет коллекцию
Значит там где на скриншотах ViewXXX_ColumnKey в окне Formula указано deptID, parentID и tabNum, надо изменить соответственно на ID, ID, а tabNum оставить ?

И по синтаксису DocumentCollection dc = view.GetAllDocumentbyKey(); вопрос, в него передается только 1 параметр: deptID, parentID или tabNum ? по которому мы и будем искать
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 15:54
И по синтаксису DocumentCollection dc = view.GetAllDocumentbyKey(); вопрос,
Да, в цикле передаешь, по одному значению. Только справку почитай, там просто 4 способа вызова этого метода.


ID, ID, а tabNum оставить ?
Да
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 15:58
Цитата Сообщение от rinsk
А чем один единственный view не устраивает?
С одной колонкой типа:
q1:=@If((Form="Department" | Form="Subdivision") & met!="1";"q1~"+parentID;"");
q2:=@If("Person" & met!="1" & @IsUnavailable($Conflict);"q2~"+tabNum;" ");
q3:=@If((Form ="Department" | Form ="Subdivision") & @IsUnavailable($Conflict) & met!="1";"q3~"+depID;"");
@Trim(q1:q2:q3)
Повторюсь еще, я не работал никогда с этим, поэтому не в курсе как вообще можно сделать это все) И тогда такой вопрос, как лучше реализовать, 3 вьюхи, каждая на свой запрос, и соответсвенно как в методе view.GetAllDocumentbyKey() указывать что бы оно искало по нужной мне вьюхе ? и если сделать 1 вьюху,то как в ней сделать что бы искало по нужному параметру? передается 3 разных параметра, 2 из них ищутся в поле ID, один в поле tabNum
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 16:14
ezhov
Одна большая тогда будет,но все же эффективнее. rinsk, спасибо за наводку.
В формулу колонки (так где ID или TabNum) делаешь так:


@Trim(@If(Form="Department"| Form ="Subdivision"; ID; Form = "Person";tabNum;""))
А формулу отбора представления так:


Select (Form="Department" | Form="Subdivision" | Form = "Person") & met != "1" & @IsUnavailable($Conflict)
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 16:43
Огромное всем спасибо !!! буду пробовать. Если все заработает напишу на сколько быстрее стало работать
0
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
28.02.2013, 17:15
Еще вопрос, View создавать надо в Domino Designer или Lotus Notes ?
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
28.02.2013, 17:20
Domino Designer вся разработка только через него
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2013, 17:20
Помогаю со студенческими работами здесь

Ftsearch
Всем привет! Столкнулся вот с каким приколом. FTSearch по базе не находит всех документов. Строка поиска, например, такая: ...

Ftsearch
При использовании NotesDatabase.FTSearch появляется ошибка &quot;Invalid note ID&quot;. Слышал, что могут при каких-то условиях генериться доки с...

Ftsearch
Set dcCollection = db.FTSearch( &quot;FIELD имя_поля=5&quot; , 0, FT_SCORES ) имя_поля типа Number Подскажите, почему оно не находит...

Ftsearch и ковычки
Как сделать, чтобы при точном поиске с FTSearch db.FTSearch(formula$,0) находились документы, чтобы в формуле запроса учитывались...

Коллекция. Ftsearch
Всем доброго времени суток!! Ответ скорее всего на поверхности, но не могу понять в чём дело... в базе у меня есть доки, в этих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru