Обновление Индексов Бд

Тема в разделе "Lotus - Xpages", создана пользователем JohnLemon, 4 дек 2014.

  1. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Здравствуйте, существует небольшая проблемка, использую поиск по вьюшке на xpages :
    Код (Text):
    var tmpArray = new Array("");
    var cTerms = 0;
    if(sessionScope.searchFIO != null & sessionScope.searchFIO != "") {
    tmpArray[cTerms++] = '(FIELD NamePatient = "*' + sessionScope.searchFIO + '*")';
    }

    if(sessionScope.searchNapr != null & sessionScope.searchNapr != "") {
    tmpArray[cTerms++] = '(FIELD NDirection = "*' + sessionScope.searchNapr + '*")';
    }

    if(requestScope.dateStart != null & requestScope.dateStart != "") {
    var d = requestScope.dateStart;
    //tmpArray[cTerms++] = "(FIELD Date = "*' + @Day(d)+"/"+@Month(d)+"/"+@Year(d) + '*")";
    tmpArray[cTerms++] = "(FIELD DDirection >= " + @Day(d)+"/"+@Month(d)+"/"+@Year(d) + ")";
    }

    if(requestScope.dateEnd != null & requestScope.dateEnd != "") {
    var d = requestScope.dateEnd;
    //tmpArray[cTerms++] = "(FIELD Date = "*' + @Day(d)+"/"+@Month(d)+"/"+@Year(d) + '*")";
    tmpArray[cTerms++] = "(FIELD DDirection <= " + @Day(d)+"/"+@Month(d)+"/"+@Year(d) + ")";
    }

    qstring = tmpArray.join(" AND ").trim();
    sessionScope.queryString = qstring;
    return qstring
    После добавления новых данных, постоянно необходимо обновлять индексы в ручную иначе не находит, как сделать обновление в автомате, при загрузке страницы например ????
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну по идее сервер сам должен обновлять виды.
    Ну а если не случилось - у страницы есть серверное событие до загрузки. Там бери объект вида и обновляй... как LotusScript
     
  3. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    А поподробнее можно ? Дело я думаю не в видах а индексах, во вьюхе на xpages я вижу это значение, а когда пытаюсь найти у меня пустая вьюшка, если захожу в properties бд, в индексы и делаю update то все находит норм.
     
  4. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Поиск полнотекстовый что ли? Дык полнотекстовый индекс мгновенно не обновляется.
     
  5. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    799
    Симпатии:
    78
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Так.. код поиска это хорошо, но давай процесс по порядку!
    Откуда создается документ? Каким образом?
    В нормальном виде новый документ созданный из web появляется сразу.. достаточно просто обновить контрол вида, но в поиске отобразится через n-времени после обновления индекса базы.
     
  7. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    может начнём по другому, а что это за поиск такой?
    как видно из начального поста, это фио+что-то+дата старт+дата енд.
    Вот есть такая дикая необходимость создать документ и тут же его искать? Темболее по таким нехилым 4-рёхслойным запросом?
    Ещё раз хочется напомнить, что это не реалиционка, и применять запросы можно, но не так часто. Если для реалиационки это единственный сопсоб показать инфу, это сделать запрос, то для лотусов есть вьюхи!!!
     
  8. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Да полнотекстовый, а через сколько он обновляется и где можно настроить?
    Да есть необходимость, один человек будет заводить сотрудника, а второй потом искать минут через 5 максимум )
    Через data, doc.save() сохраняю
     
  9. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    а вот когда создаёшь полнотекстовый индекс, в окошке, внимательней посмотри ;-)
     
  10. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    ну я ставлю immediate, дождаться не могу пока обновит )
     
  11. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    а как вы дожидаетесь? Как это выглядит? Что должно произойти? Сервак подойдёт к вам со спины, пошлёпает по плечу и скажет: "Мой генерал, по вашему заданию печенюшки были захвачены!" Так чтоли? Опиши как обязан выглядеть момент того, что сервак создал индексы. Также опиши как ты проверяешь, что у тебя все документы проиндексированны.
     
  12. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    В том то и дело что я не знаю как проверять и как обновлять, я создал индекс там указал обновление immediate. Добавляю запись, во вьюшке она есть, а если в поиске забиваю это значение - вьюшка становиться пустой, то есть не находит. Вообще необходимо так, есть сотрудник, он забивает карточку сотрудника, далее в в другом кабинете другой пользователь уже будет искать эту карточку. Поиск необходим по нескольким полям например по дате и фио и статусу и т.д. Может быть есть более простое решение ? без индексов ?
     
  13. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Есть еще 3 варианта (как минимум).
    1. Нарисовать красивый вид со всеми нужными полями и сортировками - пусть смотрят в нем.
    2. Использовать метод Search - медленный, но не требует полнотекстового индекса.
    3. Написать свой поиск - перебирать документы, проверять поля. В случае с XPages, наскока я понимаю, можно хранить коллекцию док-тов (или даже массивы значений их полей) в глобальной переменной. Т.е., можно иметь кэш...
     
  14. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    >Вообще необходимо так, есть сотрудник, он забивает карточку сотрудника, далее в в другом кабинете другой пользователь уже будет искать эту карточку.
    Если используется одна и та же БД и у пользователей настроена почта - можно прислать письмо другому пользователю о том, что создана/заполнена карточка сотрудника со ссылкой на документ и ему достаточно пройти по ссылке и искать не надо будет.
     
  15. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Или завести папку - "Новые докуметы", и все вновь созданные кидать в нее. Ночью чистить.
     
  16. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Странный какой-то процесс.
    Ну вместо полнотекстового поиска можно попробовать обойтись ключами. У вида свойства keys.
    Это может быть одно поле или группа полей.
     
  17. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    JohnLemon, похоже Вы не врубаетесь в сам процесс.
    "Вьюшка" на странице (как Вы её называете) может не иметь ничего общего с notesView - это просто таблица с данными. И не важно, как она нарисована: штатными контролами - repeat, view, datatable ... или хоть врукопашную - сами из строк\полей составили. И неважно, как её набили данными.
    При использовании отбора данных в неё с помощью полнотекстового поиска перед отбором надо обновлять полнотекстовый индекс.
    Если база на сервере - он это делает сам, но не сразу. Если на клиенте - надо вручную (кнопой или скриптом). В любом случае, такая работа очень накладна по ресурсам. В вашем случае не надо так делать.
    Если Source для "вьюшки" notesView, индекс View (не путать с полнотекстовым), обновляется автоматом, если в view попадает новый док (или удаляется).
    Можно, например так, берёте notesView где отобраны ВСЕ нужные Вам доки (SELECT Form = "моя форма" + ещё что-то, например), перебираете все доки оттуда, сравнивая нужные поля по критерию отбора.
    "Правильные" доки собираете в какой нибудь Array, который и скармливаете репитеру (или dataTable или ещё как...).
    Получается полная аналогия Folder из классики.
    Можно использовать просто штатные контролы (что логичнее всего) View или dataTable (c Source = Ваш notesView) сразу отфильтровав (by category name or by column value).
    ЗЫ
    если by column value, в колонке можно "собрать" инфу из всех нужных полей и использовать частичное сравнение (без exact match).
    Сравнивается строка с шаблоном слева-направо.
     
  18. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Попробуй так - http://julianbuss.com/blog/making-a-immedi...s-ini-variable/
     
  19. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    susinmn, подозреваю, что полнотекстовое индексирование все-таки задумывалось как неспешная, фоновая задача.
    Иначе наверняка существовал бы метод у NotesDocument типа PutInFullTextIndex (ну как PutInFolder, скажем :) Т.е., сохранил док-т, тут же (синхронно) его включил в поиск.
    NickProstoNick, вот-вот - у БАЗЫ-то есть метод, у ДОКУМЕНТА нет. Это значит, что процесс пройдется по базе, отберет коллекцию новых/измененных документов и будет их индексировать, но фиг знает в каком порядке и с каким приоритетом... Не случайно обычная переиндексация видов как бы состоит из 3-х подсистем... Вот тут немного про индексы
    ЗЫ. В принципе, Update и потом сразу Select было бы неплохо, но... не наши это методы, не лотусовые...
     
  20. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну у базы данных есть принудительное обновление индекса
    Код (Javascript):
    if (database.isFTIndexed()) {
    database.updateFTIndex(false)
    } else {
    database.createFTIndex(0, true)
    }
     
Загрузка...

Поделиться этой страницей