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

Тема в разделе "Lotus - Программирование", создана пользователем engao, 7 июл 2010.

  1. engao

    engao Гость

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

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

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

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

    Спасибо!
     
  2. divankin

    divankin Senjor developer

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

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

    engao Гость

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

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

    divankin Senjor developer

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

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

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

    engao Гость

    Заставить писать запросы пользователей - не проблема.

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Код (LotusScript):
    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, подробности в справке.
    Для представлений есть штатный конструктор запросов, может лучше научить пользователей им пользоваться?
     
  7. engao

    engao Гость

    Спасибо!
    Так и сделаю через FTSearch.
    А про штатный конструктор запросов не слышал - надо покапаться
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    1) В клиенте в нужном представлении выбираем пункт меню "Вид" — "Найти в данном представлении".
    2) В панели поиска жмём "Настройка".
    3) Изучаем... :)
     
  9. engao

    engao Гость

    Спасибо!
     
Загрузка...

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