Проблема с поиском с @contains

  • Автор темы Автор темы seoman2
  • Дата начала Дата начала
Снова возникла данная проблема.
Есть база без полнотекстового индекса, создать его нельзя, нет доступа к ней. FTSearch - не подойдет.
Надо по полю Director типа Rich Text сделать поиск.
formula$ = |@Contains(@lowercase(Director); @lowercase({| & uidoc.FieldGetText("sDirector") & |}))|
Set dc=MUdb.Search(formula$,Nothing,0)
не находит ничего...
Что делать то?
 
Создать индекс - самое простое.

Еще вариант сделать текстовое поле, которое дублирует информацию из RT, но только текст. И искать в нем.
Тут проблемы могут быть с размерами текста.
 
Я в чужой базе не могу ничего делать, в том числе текстовые поля.
 
А если RichText перегнать в Text - скажем, через GetFormattedText?
 
На собаках - @abstract или @text можно попробовать (не знаю, наверное, есть ограничения на длину).
UPD. Да, я уже понял - туплю чего-то... :-)
 
создать копию базы (реплику) а ужо там...
 
можно собрать коллекцию из документов, которые содержат данное поле
Код:
Set dc = db.Search({@IsAvailable(TekNum)}, Nothing,0)
а потом уже в цикле брать это поле - брать текст с этого поля(sss=rtitem.Text) - и через через stringExpr Like patternString уже отсеивать нужные документы
 
Да там база на несколько десятков тысяч доков... и все содержат это поле.
formula$ = |@Contains(@lowercase(@Abstract( [TEXTONLY]; 200; ""; "Director" )); @lowercase({| & uidoc.FieldGetText("sDirector") & |}))|
не помогло, как и @text
 
seoman2, действительно, не пашет в Search, а в Evaluate работает. :huh:
 
Потому что формула для Search все равно что SELECT во вьюхе.
@Abstract не работает там...
Критерии отбора: только магическое слово в RT-поле.
Тут только FTSearch пробьет, так что стоить индекс, но по словам ТС - нельзя

Тогда стоит расширять критерии отбора, взять по ним примерную коллекцию доков, скажем за текущий месяц, либо по одной форме, либо как-то еще.
Затем каждый док сканировать на слово в поле.
Да, это долго, чертовски долго.
Переводите это на сервер, чтобы клиент не подвисал. Агент ищет доки, строит excel и высылает результат, либо в папку кладет, либо одним письмом ссылки присылает.
 
Всё же через домино администратор под админом в своей реплике создал индекс. Надеюсь репликация не слетит, с учетом что у базы включен "Enforce a consistent access control list across all replicas of this database".
 
Галка кажись только на ACL влияет, индекс должен сохраниться, но только на этой реплике.
Следовательно, если поиск из клиента, то его надо проводить именно на этой реплике.
А значит у пользователя должен быть доступ к серверу, ну и Location сервера.
Проверять/переключать можно так:
Код:
If Not db.IsFtIndexed Then
If db.OpenByReplicaID(<Сервер>, db.replicaID) Then Print "Открыли реплику на другом сервере."
End If
 
>> К тому же @Contains ищет вхождения, а = — точное совпадение.
Почему то
formula$ = {[Kod]="} & uidoc.FieldGetText("skod") & {"}
находит нестрогие соответствия.
при skod="123"
находит доки с Kod="123 324"
 
В help же сказано:
•Returns true (1) if any substring is contained in one of the strings
•Returns false (0) if no substrings are contained in any of the strings

Usage

This function is case-sensitive.
If either parameter is a list, the function returns 1 if any element of parameter 1 contains any element of parameter 2.
You cannot use this function to test for substrings in a rich text field.
Avoid using this function to test for an exact match (that is, parameter 2 equals parameter 1). The result will be wrong if parameter 1 is not an exact match but does contain parameter 2. Use the equal operator or @IsMember, which will give the desired result and are more efficient.
 
seoman2
Ага. Проверьте, например, находит доки с Kod="123 324" при skod="12" :RTFM:
 
Да, собачки, я составляю формулу точного поиска для
FTSearch(formula$,0)

А для лотуса "запрос непонятный"
formula$ = {@IsMember("} & uidoc.FieldGetText("pole1") & {";pole2)}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!