Вводные данные. Есть архив номеров журнала. Данные представляют собой исходный PDF, откомпилированные PDF страницы вёрстки в SFW-формате и разметки XML для поиска. На том же SWF есть форма поиска, данные запрашиваются из соответствующего индекса, скомпилированного из PDF в XML. Для наглядности - рассматриваю конкретный пример с сайта http://ogni-sochi.ru/archs.php При нажатии на конкретный выпуск открываются SWF-страницы. В форме поиска запрос осуществляется к индекс-XML, имеющий разметку статья-страница журнала. Выглядит searchtext.xml подобным образом: HTML: <?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 (и аналоги), встречающаяся для свободного скачивания на многих сайтах, но на деле, как оказалось, красивый дизайн целого Приложения не смог даже проиндексировать сайт. Подобных вещей не надо - не тратьте время даже. Буду рад любым конструктивным рекомендациям, готовым проверенным(!) на работоспособность конструкциям.
Поизучал, посмотрел (хоть и бегло) - и как-то слишком замудрено получается на движках. С первым - так вообще всё, что нашел через MySQL проходит. Т.е. получается, что на готовые изящные данные xml-вида теперь сверху еще и БД зачем-то накидывать. Задача не состоит в том, чтобы поиск осуществлять по всему интернету, более того - даже не по всему сайту, а лишь по папке с подпапками к xml-файлам, которых в будущем-то свыше 200 едва ли возникнет. Неужели нет более простого способа написания на php скрипта, ищущего в xml-индексах поисковые фразы и выдающего в динамике в привычном html-виде?
Такое легко самому написать, открываем все xml файлы по очереди, в открытых файлах можно через xpath искать. По идее там 10 строк кода.
Как просто xml-документ вывести, я уже научился. Но вот непонимания как поиск внутри осуществлять, да еще, чтобы на выводе не вся PDF-страница выходила, точнее, её компиляция, а фраза из того xml, в которой участвовал поисковый запрос (как это сделано в Google'е или Яндексе-поисковике. Т.е. вида: Описание ссылки 1. Много-много-текста ПОИСКОВЫЙ ЗАПРОС (СОВПАДЕНИЕ)... Описание ссылки 2. Много-много-текста ПОИСКОВЫЙ ЗАПРОС (СОВПАДЕНИЕ)... и т.д. - Здесь я выделил курсивами, жирным для наглядности. Хотя стили никто не отменял, но это уже другая задача для CSS.
Мне примерно такое и надо. Только XPath, как я понял, читая др. источники, Узлы определяет, а у меня ведь задача получается другой, насколько сам улавливаю. Получается, что в большом тексте XML (сейчас про переборку открыванием каждого файла пока не говорим - это уже совсем другой алгоритм), мой Searh.php должен обнаружить сочетание введенных слов, взять вдобавок часть информации вокруг этих слов (или слова), из ближайшего впереди стоящего тега <Page> считать его Number="NN" и выдать пользователю страницу примерно следующего вида: http://мой-сайт.ru/архив_номеров/Журнал№aaa/index.html?pageNumber=aNN Текст текст текст Поисковое совпадение 1 текст текст текст http://мой-сайт.ru/архив_номеров/Журнал№bbb/index.html?pageNumber=bNN Текст текст текст Поисковое совпадение 1 текст текст текст и т.д.... Здесь: aaa, bbb - номера журналов (это я другим скриптом нахожу при переборе в папках), aNN, bNN - номера страниц, извлекаемые при нахождении совпадений в ближайших тегах <Page>. - Вот на этих местах основные вопросы и возникают.
поиск по тексту по xpath вернёт узел в котором будет весь текст который вы ищите так как будет возвращена ссылка на весь узел Page то из него можно будет получить Number В тексте фразу которую искали можно заменить на фразу обёрнутую в тег <b> тогда она будет выделена жирным Теперь можно попробовать вывести узел который вернёт xpath