|
0 / 0 / 0
Регистрация: 23.02.2013
Сообщений: 38
|
|
Запрос Для Ftsearch27.02.2013, 01:56. Показов 65992. Ответов 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 | |
|
Ftsearch Ftsearch Ftsearch Ftsearch и ковычки Коллекция. Ftsearch Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|