Проблема С Поиском Документов По Полю Со Значением Дата/время

Тема в разделе "Lotus - Администрирование", создана пользователем juk-777, 5 авг 2013.

  1. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Доброго времени суток! Помогите понять - почему не могу в базе найти стандартным поиском документы, содержащие информацию в поле с типом Дата. У меня получается так, что в результате запроса отображаются только документы, в которых указанная дата есть в текстовых полях, но никак не хотят отображаться доки, где стоит указанная дата в конкретном Date/Time поле.
    Конструкции типа FIELD date1=04.04.2013 проходят на ура, но если просто написать 04.04.2013 - то результат вернется нулевой
    Индекс по базе есть (пробовал его удалять и заново создавать); Во вьюхе столбец с этим полем присутствует, по нему также осуществляется сортировка.
    Просто странно .. ведь черным по белому в документации написано - В индекс полнотекстового поиска включаются слова, числа и даты из доступных полей всех документов в базе ... и т.д.
    Коллеги по лотусу говорят, что в их базах (каких-то других не конкретно моей ) все ищется нормально - почему же у меня такая кака понять не могу ... может где-то какая-то галочка потерялась)) помогите разобраться плиз.

    Буду благодарен всем Вашим ответам!
     
  2. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Непонятно вы ищите формулой или через Full Text (меню "Поиск")
     
  3. vited

    vited Active Member

    Регистрация:
    17 ноя 2010
    Сообщения:
    42
    Симпатии:
    0
    Классические грабли.
    У вас создался индекс по полю с датой в формате текст т.к. индексер нашел первый документ именно с таким типом данных. И в итоге у вас сейчас поиск работает по текстовому значению.
    Скорее всего у вас или на форме есть поле с датой с не обязательным заполнением, что в итоге приводит к созданию документа с полем = "" или где-то не аккуратно работаете с типом данных.
    Сейчас вам надо найти все поля с датами где тип данных текст, пустые удалить, не пустые конвертировать в Date/Time.
    Создайте представление с формулой отбора:
    SELECT @IsAvailable(ПолеДата) & !@IsTime(ПолеДата)
    избавтесь от текстовых значений в поле
    Затем удалите FT индес
    И потом выполните на сервере compact -c База
    После это создайте FT индес
     
  4. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Да, всё верно вы говорите, я проверил по полям в документе, в 2-х из 3-х моих полей с типом дата записываются значение в виде текста. Если не затруднит помочь разобраться с правильной работой с такими полями, то буду очень признателен.
    Смотрите - логика работы с этими полями в моем приложении такова: в поле Дата1 вбивается какая-то дата, потом из этого поля необходимо его вытащить в другое поле Дата2 и затем поле Дата1 "обнулить" так сказать, ну чтобы там снова стало пусто.
    Делалось это по-дурацки вот таким образом:

    curdoc.Date2=curdoc.Date1(0)
    curdoc.Date1=""

    Хочу эту порнографию исправить корректно, подскажите пожалста как. А уже с созданными документами, думаю разберусь)

    Добавлено:
    Я ищу стандартным поиском.
     
  5. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    FIELD date1=[04.04.2013]
     
  6. vited

    vited Active Member

    Регистрация:
    17 ноя 2010
    Сообщения:
    42
    Симпатии:
    0
    старайте не использовать упрощенное написание
    Код (LotusScript):
    curdoc.ReplaceItemValue "Date2", curdoc.GetItemValue("Date1")
    curdoc.RemoveItem "Date1"
    только так. т.к. если попробуете записать в Date1, null или пустой объект NotesDateTime, то всё равно получите пустую строку.
    если вам какое время не нужно поле Date1, то зачем его хранить? Это же не табличные данные. Поэтому если поле не нужно, то удаляйте. т.к. всегда можно проверить его наличие:
    Код (LotusScript):
    if curdoc.HasItem("Date1") then
     
  7. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Хочу поблагодарить за ответы и спросить еще кое что по теме (все по той же проблеме), если позволите...

    Имеется у меня другая простенькая база, в которой есть одно поле, назовем его для примера, Дата1 типа Дата/Время, которое во-первых не обязательное для заполнения и, во-вторых, заполняется ручками пользователем (то бишь не программно), и есть Текстовое поле, назовем его ДатаСоздания, которое вычисляется при создании документа с формулой @Created.
    Пока что в этой базе только 5 документов, то бишь я ее только только тестирую и хочу запустить в оборот). Проверил по полям этих документов - то там все отлично - каждое заполненное поле имеет свой правильный тип. Вопрос - почему после построение индекса по этой базе я также не могу найти документы по полю Дата1, тобишь я ввожу в поле стандартного поиска дату, которая есть у меня в этом поле, а лотус мне не находит этот документ.
    Создал я вьюхую с выборкой, указанной Вами SELECT @IsAvailable(Дата1) & !@IsTime(Дата1), в представлении 0 документов, то бишь подтверждается то, что в моих полях Дата/Время верное значение с правильным типом. Вот и сижу ломаю голову - ПОЧЕМУ так происходит, ПОЧЕМУ индекс не строится нормально?
    И еще один вопросик - критично ли то, что поле с типом Дата/Время не обязательное для заполнения? (Опытным путем вычислил, что если поле не заполнить, то после сохранения документа тип поля Дата меняется на Текст с пустым значением, =)) Я так понял его лучше удалить, наверно, если оно не заполнилось пользователем).
    Или может вообще избавиться от полей типа Дата/Время и делать поля текстовыми, а потом при построении отчетов и т.п. просто переделывать текст в дату, как я делал это до сих пор?))
    СПАСИБО!

    p.s. Сделал все по Вашему совету: Проверил все документы в тестируемой базе с 5-ю документами на правильность заполненной инфы, Удалил индекс, Сделал compact -c базы, Создал индекс заново, НО искать по полям типа Дата все равно не могу .. не ищет зараза =((
     
  8. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Что именно вы вводите? Как выглядит ваша строка для поиска?
     
  9. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Просто дату пишу - например - 04.04.2013
    Я-то могу написать конструкцию типа FIELD date1=[04.04.2013] и найти че-то, но этот вариант не подойдет для обычных юзеров (ющут доки они, а не я), и подобные конструкции для них не приемлемы!
    Необходимо, чтобы лотус искал сам документы по введенной дате и все! без лишний уточнений в виде полей.
     
  10. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Ну это же текст, а не дата. Даже если вы сможете искать по дате таким образом, такой поиск будет некорректен, т.к. в документе могут быть служебные поля с датой, например $Revisions. Как вы объясните пользователям "Почему этот документ нашелся?".

    Создайте представление с категорией по вашему полю с датой - пусть там смотрят.
     
  11. vited

    vited Active Member

    Регистрация:
    17 ноя 2010
    Сообщения:
    42
    Симпатии:
    0
    Честно говоря странная для меня конструкция: FIELD date1=[04.04.2013]
    у меня клиент грит "не понимаю запрос", правильно [date1]=04.04.2013
    Но garrick прав. Если просто написать в строке поиска 04.04.2013, то лотус будет искать текстовое значение 04.04.2013 в текстовых полях.
    Но тогда нельзя будет найти, например, все документы с датой создания больше 04.04.2013 (кстати для этого существует запрос по системному полю [_CreationDate]>=04.04.2013)
    Для пользователей, что не будут осваивать написание запросв, есть в строке поиска кнопка "Дополнительно" правее кнопки "искать". Там можно указать поле из списка и значение. F1 рулит.
     
  12. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Найти документ по дате создания или дате изменения не составляет труда - это все делается как вы и говорите через кнопку Дополнительно (ну чтобы не писать юзерам запросы вроде [_CreationDate]>=04.04.2013, так как они ни за что в жизни не будут писать подобное =) Просто поточу что это неудобно и долго))
    НО, задача моя не состоит в том, чтобы искать доки по системным полям (дата создания и изменения), а по моим созданным полям типа Дата. И я так понимаю, что чтобы что-то найти по этим полям - то надо точно знать название поля, чтобы написать конструкцию типа [date1]=04.04.2013 (это ж надо всем двустам людям сказать что поле называется Дата12345 ,и чтобы вы могли найти че-то то пишите вот так вот [Дата12345]=04.04.2013. На мой взгляд это бредово и странно что сама система лотус работает так, что ей надо явно указывать че да как.
    В общем, если я правильно понимаю - то лучше либо искать из того же пункта дополнительно "По форме" или "По полю" (что ваще не удобно ибо полей куча и юзеры ваще не сориентируются), либо создавать свою кнопку для поиска, чтобы по ней открывалась какая-то своя форма для занесения туда необходимых данных для поиска ...
     
  13. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Да, лучше свою форму. Опять же, при этом можно сделать "справочник полей", чтобы пользователь выбирал в форме "человеческое" название поля (скажем, "Фамилия", "Должность", "Дата создания", "Дата согласования"), а в сам запрос попадали бы уже реальные имена полей (те, которые есть в документах). Можно вместо значений реальных полей формулы использовать - в общем, это достаточно известный механизм для составления несложных отчетов. :)

    Или, как правильно писали выше, делайте виды с категоризацией/сортировкой по подобным полям.
     
  14. juk-777

    juk-777 Active Member

    Регистрация:
    5 авг 2013
    Сообщения:
    38
    Симпатии:
    0
    Понял Вас !
    СПАСИБО Всем за ответы !!
     
  15. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Лотусе для поиска требуется ТИП искомых данных, поскольку смысл операторов сравнения (">" "<" ..) существенным образом зависит от этого. ЕСЛИ в запросе есть имя поля, то тип аргумента поиска определяется по типу этого поля. ЕСЛИ имён полей нет, то запрос полагается чистА ТЕКСТОВЫМ
     
Загрузка...
Похожие Темы - Проблема Поиском Документов
  1. seoman2
    Ответов:
    62
    Просмотров:
    13.001
  2. lira89
    Ответов:
    2
    Просмотров:
    2.505
  3. AgniXRudra
    Ответов:
    0
    Просмотров:
    0
  4. Zloikaktus
    Ответов:
    0
    Просмотров:
    12
  5. c0de3r
    Ответов:
    5
    Просмотров:
    134

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