Ftsearch [period] = "декабрь"

Тема в разделе "Lotus - FAQ", создана пользователем Bob84, 13 янв 2014.

  1. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    Здравствуйте.
    Есть база с документами, индекс создан, падает при следующем запросе (как в коде, так и через поиск в представлении выдает сообщение "Query is not understable"):
    [Period] = "декабрь"

    Поле текстовое. С другими полями проблем нет. В другой базе на аналогичный запрос не плюется ошибкой.
    Пересоздал индекс - не помогло.
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Проблема возникла у заказчика или на стенде разработки? Где-то это поле было или есть нетекстовым (дата, например) и так записано в таблице полей базы.
    Если было - удалить индекс и пересоздать реплику. Если есть - переименовать поле в существующих документах или отказаться от использования фт-индекса. Спроси у Тохи нашего, он с этим сталкивался при поиске.

    P.S.: Насколько я помню, удаление индекса и компакт в моем случае не помогли (compact обычный и copy-style вроде делала тоже, уже не помню точно), хотя где-то в вариантах гугления было описано, что помогает, а локальная реплика без индекса помогла, но на сервер разработки ее не заливала - в итоге тогда приняли решение обойтись без ft.
    Ссыль от вендора - https://www-304.ibm.com/support/docview.wss?uid=swg21261002
     
  3. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    Понял, попробую. Спасибо
     
  4. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    Почитал ссылка
    Сделал следующее
    1. Удалил поле Period из всех форм (в подформах у меня его не было).
    2. Выполнил следующий агент:

    Код (LotusScript):
    Sub Initialize
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim i As Integer
    Dim nc As NotesNoteCollection
    Dim noteid As String
    Dim nextnoteid As string

    Const ITEM_NAME = "Period"

    Set db = s.Currentdatabase
    Set dc = db.Alldocuments

    i = 1
    Set doc = dc.Getfirstdocument()
    While Not doc Is Nothing
    If doc.Hasitem( ITEM_NAME ) Then
    Call doc.Removeitem( ITEM_NAME )
    Call doc.Save( true, false )
    End If

    Print CStr( i ) & "\" & CStr( dc.Count )
    i = i + 1
    Set doc = dc.Getnextdocument( doc )    
    Wend

    'погромист-кун не должен забывать про наличие итемов в формах...
    Set nc = db.CreateNoteCollection(False)
    nc.SelectForms = true
    Call nc.BuildCollection
    noteid = nc.Getfirstnoteid()
    For i = 1 To nc.Count
    Set doc = db.Getdocumentbyid( noteid )
    noteid = nc.Getnextnoteid( noteid )
    If doc.Hasitem( ITEM_NAME ) Then
    Call doc.Removeitem( ITEM_NAME )
    Call doc.Save( True, False )
    End If
    Print CStr( i ) & "\" & CStr( nc.Count )
    Next   

    End Sub
    3. Удалил индекс
    4. Через администратор выполнил команду (перед этим закрыл базу, в том числе в дизайнере удалил ссылку на нее):
    lo compact <путь к базе> –c
    5. Вернул поле Period в формы.
    6. Выполнил компакт базы.
    7. Создал индекс.

    Проблема решена.
    Еще раз спасибо за помощь.
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    >5. Вернул поле Period в формы.
    Проверил, оно везде на формах текстовое? Если нет, лучше переименовать нетекстовое. Одно имя с разными типами - плохая практика для доминохи.
    Хотя, возможно, для таких полей галочка на форме "не добавлять в индекс" поможет.
    Какой-то странный вариант работы с доками - разве это поле темповое, что везде грохнули без разбору:)
     
  6. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    Я на сервере разработки все это делал грохнул, оно везде текст. У заказчика так видимо не выйдет... У меня еще одна ошибка такая есть, потренируюсь :)
     
  7. Bob84

    Bob84 Active Member

    Регистрация:
    16 май 2012
    Сообщения:
    38
    Симпатии:
    0
    В результате выяснено, что (в моем случае ) не нужно удалять итемы в документах и поля в формах. Достаточно удалить индекс и выполнить такой агент (надо было убрать пару полей, поэтому немного изменил):
    Код (LotusScript):
    Sub Initialize
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim i As Integer
    Dim nc As NotesNoteCollection
    Dim noteid As String
    Dim nextnoteid As string
    Dim itemArr As Variant
    Dim NeedSave As Boolean

    Const ITEM_NAME = "ItemName1|ItemName2"

    itemArr = Split( ITEM_NAME, "|" )
    'погромист-кун не должен забывать про наличие итемов в формах...
    Set db = s.Currentdatabase 
    Set nc = db.CreateNoteCollection(False)
    nc.SelectForms = true
    Call nc.BuildCollection
    noteid = nc.Getfirstnoteid()
    For i = 1 To nc.Count
    Set doc = db.Getdocumentbyid( noteid )
    noteid = nc.Getnextnoteid( noteid )
    NeedSave = false
    ForAll IA In itemArr
    If doc.Hasitem( IA ) Then
    Call doc.Removeitem( IA )
    NeedSave = true
    End If
    End ForAll
    If NeedSave Then
    Call doc.Save( True, False )
    End If
    Print CStr( i ) & "\" & CStr( nc.Count )
    Next   

    End Sub
    В этом случае с данными в документах ничего не произойдет.
     
Загрузка...
Похожие Темы - Ftsearch [period] декабрь
  1. Amfion
    Ответов:
    10
    Просмотров:
    155
  2. seoman2
    Ответов:
    6
    Просмотров:
    520
  3. seoman2
    Ответов:
    4
    Просмотров:
    1.365
  4. ezhov
    Ответов:
    83
    Просмотров:
    13.130
  5. NickProstoNick
    Ответов:
    11
    Просмотров:
    2.614

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