Как организовать поиск из XML-данных?

DevConf 2017 - видео с конференции, успей до 17 июля | Проверенные VDS на SSD в Европе и России

Тема в разделе "PHP & XML-технологии", создана пользователем Денис Тар, 10 сен 2016.

Метки:
  1. Денис Тар

    Денис Тар Новичок

    Сообщения:
    1
    Adress:
    Sochi, Russia
    Country:
    Location on Map:
    Вводные данные.
    Есть архив номеров журнала. Данные представляют собой исходный PDF, откомпилированные PDF страницы вёрстки в SFW-формате и разметки XML для поиска. На том же SWF есть форма поиска, данные запрашиваются из соответствующего индекса, скомпилированного из PDF в XML.
    Для наглядности - рассматриваю конкретный пример с сайта http://ogni-sochi.ru/archs.php
    При нажатии на конкретный выпуск открываются SWF-страницы. В форме поиска запрос осуществляется к индекс-XML, имеющий разметку статья-страница журнала.
    Выглядит searchtext.xml подобным образом:

    <?xml version="1.0" encoding="utf-8" ?>
    <Search>
    <Pages Count="92">
    <Page Number="1">1 огни сочи большого для всех 78 (76) июль август 2016 рубрика константин затулин: сочи нужна отдельная строка в федеральном бюджете 7 8 (76) июль август 20 16 журнал для тех, кто любит наш город к ипотечным сделкам с через партнерские каналы продаж единство наций с сила россии. 30 июля с день дружбы все хоры в гости к нам! лидер предпринимательства сочи 2016 спецпроект константин затулин: сочи нужна отдельная строка в федеральном бюджете
    </Page>
    <Page Number="2">2 78 (76) июль август 2016 огни сочи большого для всех рубрика отель «жасмин» – отдых в удовольствие! отдых абхазия агурское ущелье аквапарк лоо сплав по реке «33 водопада» вечерний сочи красная поляна мацестинский чай змейковские водопады изумрудная долина «в гостях у пасечника» женский монастырь дельфинарий дача сталина дерево дружбы обезьяний питомник в гостях у шапсугов воронцовские пещеры экскурсии трансфер (10 комфортабельных автобусов) комбинированные экскурсии перевозки рабочего персонала наш транспорт ооо «виктория» сочи, пос. кудепста, сухумское шоссе, 50/2, тел. 8-918-101-80-01, 8-800-222-70-80 (бесплатный звонок) www.viktoriasochi.ru e-mail: tcakunova@yandex.ru
    </Page>
    ......
    <Page Number="NN">NN www.ogni-sochi.ru 78 (76) июль - август 2016 огни сочи большого для всех рубрика
    </Page>
    </Pages>
    </Search>

    Имеются файлы (как понимаю) с данными о вхождениях слов для каждой страницы search1.xml ... searchNN.xml
    Пример:
    search2.xml

    ...
    абхазия:729:2835:0:127:65;125;172;231;285;345;400
    агурское:729:2984:0:127:65;108;158;220;273;329;387;446
    ущелье:1195:2984:0:127:50;135;193;249;303;361
    ...

    Возникла необходимость организовать аналогичный поиск, только уже среди всех загруженных на сайт выпусков журнала.
    Т.е. искать будем не в одном searchtext.xml, а во всех. В общем виде структура такова:

    • Адрес_сайта.ru/Архив_номеров/Номер_001/searchtext.xml
    • ... (Структура 1)
    • Адрес_сайта.ru/Архив_номеров/Номер_NNN/searchtext.xml

    Вопрос и мысли к решению, но пока не давшие ответа.
    1. Ставим в любое место на сайте форму ввода запроса на поиск - тут всё понятно.
    2. По нажатию кнопки "ОК" отправляем строку запроса обработчику search.php.
    3. Этот search.php проверят введенную строку, режет лишние знаки "пробел", приводит буквы к строчным и т.д.
    4. Сам поиск. (Тут у меня и начинаются вопросы)...
    Где искать? В Структуре 1, описанной выше?
    Или всё-таки необходимо при выпуске каждого очередного номера, пополнять Индекс-индексов, в котором будет храниться сбор из ~NN/searchtext.xml с дополнительным тегом, сообщающем о NN-номере издания?
    5. Что искать?
    Я понимаю как в файле строковыми функциями найти первое вхождение субстроки в строку, но как быть с последовательностью слов - остается "белое пятно". В особенности касается семантики с использованием регулярных выражений.
    Если запрос будет, например, "Марию Иванову назначили директором", то регулярное выражение + строковая функция должны порезать фразу на массив из нескольких слов с неопределенными окончаниями? - Верно ли понимаю, что искаться будет каждое слово по-отдельности, но не фраза? Либо фраза, но при полном соответствии субстроки из всего текста индекс-документа строке запроса? Разумеется все символы верхнего регистра и там, и там приведены к строчным.
    6. От готовых сервисов поиска, как Google или Яндекс заведомо отказываемся, потому как им требуется время для прощелкивания сайта, что в корне неправильно, когда информация уже загружена на сервер, а найти её не получилось.
    Я пробовал поиск от Яндекс - и он довольно хорошо справился с поиском, как внутри обычных текстовых документов, самих php-страниц, а также
    searchtext.xml-файлов (это - единственный момент - оптимизация для поиска - приятно порадовал меня, как разработчика).
    Если первые запустились как вэб-страницы, то вторые - разумеется, показали лишь разметку, в которой можно продолжить поиск CTRL+F, что, конечно, мягко говоря, некрасиво и нефункционально для обычного пользователя, не ищейки.

    Есть целая админка phpsearch (и аналоги), встречающаяся для свободного скачивания на многих сайтах, но на деле, как оказалось, красивый дизайн целого Приложения не смог даже проиндексировать сайт. Подобных вещей не надо - не тратьте время даже.

    Буду рад любым конструктивным рекомендациям, готовым проверенным(!) на работоспособность конструкциям.