|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
|
|
Запрос Для Ftsearch27.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
|
|
| 27.02.2013, 01:56 | |
|
Ответы с готовыми решениями:
87
запрос для Ftsearch: подскажите как выкрутиться & @isavailable($conflict) для Ftsearch Ftsearch |
|
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 | ||
В данной ситуации не нужно делать 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 | ||
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 | |||
<!--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] Добавлено:
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 | ||
И по синтаксису DocumentCollection dc = view.GetAllDocumentbyKey(); вопрос, в него передается только 1 параметр: deptID, parentID или tabNum ? по которому мы и будем искать
0
|
||
|
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
|
|||
| 28.02.2013, 15:54 | |||
0
|
|||
|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
|
||
| 28.02.2013, 15:58 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
|
|||
| 28.02.2013, 16:14 | |||
|
ezhov
Одна большая тогда будет,но все же эффективнее. rinsk, спасибо за наводку. В формулу колонки (так где ID или TabNum) делаешь так:
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
|
|
| 28.02.2013, 17:20 | |
|
Помогаю со студенческими работами здесь
40
Ftsearch Ftsearch Ftsearch Ftsearch и ковычки Коллекция. Ftsearch Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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
|