Поиск По Полной Фразе

04.12.2012
12
0
#1
Добрый день! Такая вот проблема: мне необходимо реализовать поиск по полной фразе.
Например, поиск в базе фразы "Приказ 246", результатом которого должна стать выборка документов, в которых встречается И слово "Приказ" И число "246". Как вариант - пусть встречается фраза "Приказ 246" как одно целое.
FTSearch и FTSearchRange работают "по кускам" - т.е. результатом запроса могут стать как документы, содержащие число "246", так и документы, содержащие слово "Приказ". А нужно - "Приказ" И "246".
Вот такая вот проблема. Есть ли идеи, как ее решить?
 

Serduko

Well-Known Member
11.10.2011
170
0
#2
Если поля, где встречается строка известны, то почему бы не попробовать просто notesdatabase.search, без полнотекстового поиска?

Например:
Код:
set notesdocumentcollection = notesdatabase.search({Select @like(field1;"%Приказ 246%") | @like(field2;"%Приказ 246%")},nothing,0)
 
04.12.2012
12
0
#3
Я ищу данную фразу по базе в целом - не только по полям БД, но и по прикрепленным документам. Причем документов достаточно много, поэтому скорость работы довольно-таки критична
 

Serduko

Well-Known Member
11.10.2011
170
0
#4
Тогда та же формула, но:

Код:
Set notesdocumentcollection= notesdatabase.AllDocuments
Call notesdocumentcollection.ftsearch({Select @like(field1;"%Приказ 246%") | @like(field2;"%Приказ 246%")},0)
Туда же включаешь RT поля. Возможно сработает и на вложения.

Добавлено: Возможно лучше так:

Код:
Set notesdocumentcollection= notesdatabase.AllDocuments
Call notesdocumentcollection.ftsearch({Select @Contains(field1;"Приказ 246") | @Contains (field2;"Приказ 246")},0)
 

Serduko

Well-Known Member
11.10.2011
170
0
#5
Перепутал полнотекстовый и @формула,
Надо:
Код:
[field1] Contains "Приказ 246"
 

afest

Well-Known Member
16.06.2009
78
0
#10
в FTSearch'e просто делаешь свою выборку на @ и все будет нормуль, сам так делал, работает шустро, главное знать шо нужно сделать
ЗЫ: хэлпу никто не отменял, правда там тяжко порой найти нужное
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 226
25
#12
Это где такое прописывать?
там где ты прописываешь "Приказ 246"
я вообще в шоке от твоего вопроса
ты же в теме сам написал, тебе нужно И, так вот И в полнотекстовом поиске это AND пишешь в строке поиска или в db.ftsearch - не важно, важно что это И

но это всё равно может быть для тебя не выходом, так как будет найден документ в котором в любом поле есть "Приказ" и в любом поле есть "246" а то, что это может быть не одно и тоже поле понимаешь? :)

хотя и тут можно попробовать с умничать типа так [Field]="Приказ AND 246"
 
04.12.2012
12
0
#13
ты же в теме сам написал, тебе нужно И, так вот И в полнотекстовом поиске это AND пишешь в строке поиска или в db.ftsearch
Проблема в том, что это не работает. Т.е. и ftSearch и ftSearchRange находят ддокументы, в которых есть что-то одно. Прям как бдто ИЛИ пишу. Я уж какие только запросы не вымудрял и как только не переписывал. И AND писал, и знак & использовал, и всякие чудовища вроде CONTAINS или PARAGRAPH. Один фиг - находит не то, что нужно. Точнее, то что нужно находит, но и кучу мусора тоже. При этом иногда команда работает адеватно - но зависимости я не нашел((
И еще: у меня не только по полям поиск, но и по прикрепленным документам (вордовским). И в них он зачастую вообще даже не по словам ищет, а по кускам слов. В приведенном чуть измененном примере, кстати: "ПриказAND246П" он нашел документ, в котором не было ни слова приказ, ни 246П. Зато было просто 246...
Вот поэтому я и стал интересоваться, как можно этот момент обойти(
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 226
25
#14
раскрой секцию по фтп поиску и посмотри не влючено ли у тебя фюзи сечь - "простой поиск", "поиск со сменой окончания" и т.д.
 
04.12.2012
12
0
#15
Отлично! Спасибо за совет! Заменил FT_FUZZY на FT_STEMS. Теперь ищет в точности, как написано. Добавлю просто поле для опции - искать все подряд или искать 100%ное вхождение - и вуаля!
Спасибо большое за помощь!
P.S. Итоговая строчка споиском выглядела у меня так:
If (searchCondition = "Везде") Then
Set collection=db.FTSearchRange(SearchStr, 0, FT_SCORES, FT_STEMS)
End If
Естественно, у меня будут еще вариации поля searchCondition.
 

afest

Well-Known Member
16.06.2009
78
0
#16
ну как вариант и такое должно работать:

searchFormula$ = {@Contains(field1;"Приказ") & @Contains(field1;"246")}
Set collection = db.Search(searchFormula$,Nothing,0)

ЗЫ: в выборку можно еще и форму для поиска указать, например
searchFormula$ = {Form = "Project" & @Contains(field1;"Приказ") & @Contains(field1;"246")}