Сложный поиск в строке

  • Автор темы engao
  • Дата начала
E

engao

#1
Доброго времени суток!

Есть задача - написать парсинг сложного поиска по строке (что-то вроде SQL запроса) на LotusScript. Конечно LotusScript для этого не лучший язык.

Строка поиска может выглядеть примерно так:
("Str1" Or "Str2") And "Str3"
или
("Str1" And "Str2") Or ("Str3" And "Str4")
в обще вариантов много...

Хотелось бы послушать рекомендации опытных людей.

Спасибо!
 

divankin

Senjor developer
13.08.2009
182
0
#2
А можно услышать всю задачу?
1. Откуда берется запрос?
2. Фиксирован ли синтаксис его?
3. Какие еще идиомы могут встречаться в запросе?
4. Есть ли ограничение по каким полям искать?
5. Что планируется делать с запросом?

Может быть вам ничего не нужно делать. Просто сунуть запрос на вход к FTSearch
 
E

engao

#3
А можно услышать всю задачу?
1. Откуда берется запрос?
2. Фиксирован ли синтаксис его?
3. Какие еще идиомы могут встречаться в запросе?
4. Есть ли ограничение по каким полям искать?
5. Что планируется делать с запросом?

Может быть вам ничего не нужно делать. Просто сунуть запрос на вход к FTSearch
Это проект рекрутинговой компании. Смысл этой задачи - идентифицировать технические знания кандидата.
Огранизовано следующим образом: создается документ, где описано какие тех. характеристики интересуют и по каким пораметрам их идентифицировать (Search String). Далее поиск производится по одному из полю в документре Резюме.

1. Откуда берется запрос?
Задается пользователем и сохраняется в документе
2. Фиксирован ли синтаксис его?
Синтаксис не фиксирован, но упрощен тем, что синтаксис без вложеных запросов, т.е. без двойных и тройных скобок
3. Какие еще идиомы могут встречаться в запросе?
Без особых заморочек
4. Есть ли ограничение по каким полям искать?
Искать только по 1 полю
5. Что планируется делать с запросом?
Результатом запроса достаточно если будет True/False
 

divankin

Senjor developer
13.08.2009
182
0
#4
То есть вам нужно сформировать формулу и натравить ее на документ.
Как сформировать формулу? Ну, строка разделяется на несколько частей: "(", ")", " AND ", " OR " и все остальное между ними.
Скобки оставляем без изменений.
AND и OR заменяем соответственно на & и |
<все остальное> заменяем на @Contains("Resume"; <все остальное>) , где Resume - это поле, по которому нужно искать

Полученную формулу натравливаем на документ с помощью Evaluate и получаем результат.

P.S. Как альтернативный вариант, можно дать пользователю конструктор запроса. В качестве примера редактирование почтовых правил почтовой базы.
 
E

engao

#5
То есть вам нужно сформировать формулу и натравить ее на документ.
Как сформировать формулу? Ну, строка разделяется на несколько частей: "(", ")", " AND ", " OR " и все остальное между ними.
Скобки оставляем без изменений.
AND и OR заменяем соответственно на & и |
<все остальное> заменяем на @Contains("Resume"; <все остальное>) , где Resume - это поле, по которому нужно искать

Полученную формулу натравливаем на документ с помощью Evaluate и получаем результат.

P.S. Как альтернативный вариант, можно дать пользователю конструктор запроса. В качестве примера редактирование почтовых правил почтовой базы.
Заставить писать запросы пользователей - не проблема.

А можно по точнее как направить полученную формулу с помощью Evaluate на документ?
 

nvyush

Lotus team
22.04.2009
2 317
0
#6
А можно по точнее как направить полученную формулу с помощью Evaluate на документ?
Код:
Dim res As Variant
res = Evaluate(query, doc)
Dim result As Boolean
result = Cbool(res(0))
query — строка вида {(@Contains(Resume; "HTML") | @Contains(Resume; "PHP")) & @Contains(Resume; "JAVA")}
doc — документ.
Если нужно искать в базе, представлении — есть методы FTSearch, Search, подробности в справке.
Для представлений есть штатный конструктор запросов, может лучше научить пользователей им пользоваться?
 
E

engao

#7
Код:
Dim res As Variant
res = Evaluate(query, doc)
Dim result As Boolean
result = Cbool(res(0))
query — строка вида {(@Contains(Resume; "HTML") | @Contains(Resume; "PHP")) & @Contains(Resume; "JAVA")}
doc — документ.
Если нужно искать в базе, представлении — есть методы FTSearch, Search, подробности в справке.
Для представлений есть штатный конструктор запросов, может лучше научить пользователей им пользоваться?
Спасибо!
Так и сделаю через FTSearch.
А про штатный конструктор запросов не слышал - надо покапаться
 

nvyush

Lotus team
22.04.2009
2 317
0
#8
А про штатный конструктор запросов не слышал - надо покапаться
1) В клиенте в нужном представлении выбираем пункт меню "Вид" — "Найти в данном представлении".
2) В панели поиска жмём "Настройка".
3) Изучаем... :)