Поисковая система для php

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

A modular crawler/spider search engine written in pure PHP

gaffling/PHP-Search-Engine

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This is the the resulting code of a 5 part series which you can read here:

Keep in mind this was never intended to be a drop in replacement for any existing search service or even a install and index solution. You will need to modify code to do anything with this. This may change in the future as I have some additional code which should allow the creation of a full search solution.

About

A modular crawler/spider search engine written in pure PHP

Источник

Пишем поиск по сайту на PHP и MySQL

Сегодня мы напишем собственный поиск по сайту с использованием PHP и MySQL. Первым делом рассмотрим краткий алгоритм.

Пользователь выполняет POST запрос из формы поиска, этот запрос передается специальному скрипту-обработчику, который должен обработать поисковый запрос пользователя и возвратить результат.

Сначала скрипт должен обработать должным образом запрос пользователя для обеспечения безопасности, затем выполняется запрос к базе данных, который возвращает в ассоциативном массиве результаты, которые должны будут выводиться на экран. Итак, приступим.

Для начала создадим форму поиска на нужной нам странице:

Эта форма и будет отправлять сам поисковый запрос скрипту search.php. Теперь создадим сам скрипт-обработчик.

 if (!mysql_select_db(DB_NAME)) < exit('Cannot select database'); >mysql_query('SET NAMES utf8'); function search ($query) < $query = trim($query); $query = mysql_real_escape_string($query); $query = htmlspecialchars($query); if (!empty($query)) < if (strlen($query) < 3) < $text = '

Слишком короткий поисковый запрос.

'; > else if (strlen($query) > 128) < $text = '

Слишком длинный поисковый запрос.

'; > else < $q = "SELECT `page_id`, `title`, `desc`, `title_link`, `category`, `uniq_id` FROM `table_name` WHERE `text` LIKE '%$query%' OR `title` LIKE '%$query%' OR `meta_k` LIKE '%$query%' OR `meta_d` LIKE '%$query%'"; $result = mysql_query($q); if (mysql_affected_rows() >0) < $row = mysql_fetch_assoc($result); $num = mysql_num_rows($result); $text = '

По запросу '.$query.' найдено совпадений: '.$num.'

'; do < // Делаем запрос, получающий ссылки на статьи $q1 = "SELECT `link` FROM `table_name` WHERE `uniq_id` = '$row[page_id]'"; $result1 = mysql_query($q1); if (mysql_affected_rows() >0) < $row1 = mysql_fetch_assoc($result1); >$text .= '

href="'.$row1['link'].'/'.$row['category'].'/'.$row['uniq_id'].'" title="'.$row['title_link'].'">'.$row['title'].'

'.$row['desc'].'

'; > while ($row = mysql_fetch_assoc($result)); > else < $text = '

По вашему запросу ничего не найдено.

'; > > > else < $text = '

Задан пустой поисковый запрос.

'; > return $text; > ?>

Естественно, данные таблиц БД нужно задать собственные. Рассмотрим, что делает эта функция. Первые 4 строчки обрабатывают запрос, чтобы он стал безопасным для базы. Такую обработку нужно делать обязательно, т. к. любая форма на Вашем сайте — это потенциальная уязвимость для злоумышленников.

Затем идет проверка, не пустой ли запрос. Если запрос пустой, то возвращаем соответствующее сообщение пользователю. Если запрос не пустой, проверяем его на размер.

Если поисковый запрос имеет длину менее 3 или более 128 символов, также выводим соответствующие сообщения пользователю. Иначе, выполняем запрос к базе данных, который делает выборку идентификатора страницы, ее заголовка, описания, описания ссылки, категорию, если она есть и идентификатор самой статьи, в которой найдены совпадения нужных нам полей с поисковым запросом.

В данном случае мы делаем сравнение с текстом статьи, ее заголовком, ключевыми словами и описанием. Если ничего не найдено, выводим пользователю сообщение об этом. Если запрос возвратил хотя бы одну запись, выполняем в цикле еще один запрос, который делает выборку из таблицы со страницами ссылку на страницу, на которой находится статья.

Если у Вас все статьи на одной странице, вы можете опустить этот шаг. После выполнения запроса при каждой итерации цикла в переменную $text Дозаписываем одну найденную статью.

После завершения цикла, возвращаем переменную $text , Которая и будет выводиться на нашей странице пользователю.

Теперь осталось на этой же странице search.php сделать вызов этой функции и вывести ее результат пользователю.

Также вы можете упростить скрипт поиска по Вашему усмотрению. Желательно создать стиль в таблице css для выводимой информации, чтобы выводимая информация смотрелась более красиво и читабельно. Все замечания вопросы по скрипту можете задавать в комментариях.

Источник

Создание ознакомительного поискового движка на Sphinx + php

Перед началом использования сфинкса лучше сразу подготовить базу данных для более удобной индексации и поиска.
У меня есть три таблицы: products, companies, categories, соответственно товары, компании и категории товаров. Создадим view, в котором объединим те данные из всех трех таблиц, по которым будет идти поиск:

CREATE OR REPLACE VIEW `catalog` AS SELECT p.`id` , p.`id_company` , p.`id_category` , p.`name` , p.`keyword` , p.`short_desc` , com.`name` AS company_name, cat.`name` AS category_name FROM `products` p JOIN `categories` cat ON p.id_category = cat.id JOIN `companies` com ON p.id_company = com.id WHERE 1 

Поиск в моем случае ведется по полям: название, ключевое слово, краткое описание товара, название компании-производителя и название категории товара. В WHERE можно дописать дополнительные условия, например чтобы поиск шел только по активным компаниям и товарам. На этом подготовительные работы с базой данных закончены.

2. Установка Sphinx

Необходимо с оффсайта скачать свежий дистрибутив: www.sphinxsearch.com/downloads.html
Я скачал себе версию Win32 binaries w/MySQL support 1.10 beta. Далее распаковываем содержимое архива в какую-нибудь папку (я распаковал в C:\Sphinx)

Конфигурирование Sphinx

После скачивания и распаковки архива следующий шаг — настройка. Я в качестве основы взял файл sphinx.conf.in
В этом разделе просто буду приводить конфиги с небольшими комментариями, там вроде все понятно. Весь текст из этого раздела лежит в одном файле sphinx.conf.in

Источник данных
# Источник данных для поиска source catalog < # Тип данных # Доступные типы: mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc type = mysql # Необходимые параметры для подключения к базе данных sql_host = localhost sql_user = root sql_pass = sql_db = products sql_port = 3306 # опциональный, по умолчанию 3306 # пред-запрос, выполняется перед выполнением основного запроса на получение данных из базы # В нашей базе данные хранятся в UTF-8, чтобы поиск по русским символам работал успешно выполним соответсвующий запрос sql_query_pre = SET NAMES utf8 # запрос, который получает данные документов для поиска # первым полем обязательно должен идти уникальный положительный ID документа sql_query = \ SELECT * \ FROM catalog # поля, по которым может идти группировка, фильтрация и сортировка sql_attr_uint = id_company sql_attr_uint = id_category # document info query, ONLY for CLI search (ie. testing and debugging) # optional, default is empty # must contain $id macro and must fetch the document by that id sql_query_info = SELECT * FROM products WHERE индексации товаров
# индекс каталога товаров для поиска index catalog < # Источник данных для индексирования source = catalog # Адрес, где будут хранится данные индекса path = C:\Sphinx/data/catalog # Индекс с учетом морфологии morphology = stem_ru # Минимальная длина слова для индексации min_word_len = 1 # Кодировка charset_type = utf-8 >
Настройки поискового демона (службы)
# поисковый демон (служба) searchd < # какой порт и какой протокол "слушает" служба listen = 9312 # файл с логами log = C:\Sphinx/log/searchd.log # файл с логами поисковых запросов query_log = C:\Sphinx/log/query.log # PID file, searchd process ID file name # mandatory pid_file = C:\Sphinx/log/searchd.pid >

На этом конфигурирование сфинкса закончено.
Теперь установим нашу службу. Для этого в адресной строке пишем C:\Sphinx\bin\searchd —install —config C:\Sphinx\sphinx.conf.in —servicename SphinxSearch
Служба установлена и должна появится в администрирование — службы. Пока не запускаем — наши данные еще не проиндексированы.

3. Индексирование и тестовый поиск

Теперь в командной строке пишем C:\Sphinx\bin\indexer —all —config C:\Sphinx\sphinx.conf.in. Получаем результат вроде этого:

C:\Users\Iskander> C:\Sphinx\bin\indexer --all --config C:\Sphinx\sphinx.conf.in Sphinx 1.10-beta (r2420) Copyright (c) 2001-2010, Andrew Aksyonoff Copyright (c) 2008-2010, Sphinx Technologies Inc (http://sphinxsearch.com) using config file 'C:\Sphinx\sphinx.conf.in'. indexing index 'catalog'. collected 572 docs, 0.1 MB sorted 0.0 Mhits, 100.0% done total 572 docs, 115192 bytes total 0.380 sec, 303124 bytes/sec, 1505.19 docs/sec total 2 reads, 0.000 sec, 31.6 kb/call avg, 0.0 msec/call avg total 9 writes, 0.001 sec, 14.6 kb/call avg, 0.1 msec/call avg

Все, индекс создан. Теперь запускаем нашу службу SphinxSearch и в поисковой строке пишем что нибудь вроде
C:\Sphinx\bin\search —config C:\Sphinx\sphinx.conf.in computer и получаем результат

C:\Users\Iskander> C:\Sphinx\bin\search --config C:\Sphinx\sphinx.conf.in computer Sphinx 1.10-beta (r2420) Copyright (c) 2001-2010, Andrew Aksyonoff Copyright (c) 2008-2010, Sphinx Technologies Inc (http://sphinxsearch.com) using config file 'C:\Sphinx\sphinx.conf.in'. index 'catalog': query 'computer': returned 1 matches of 1 total in 0.000 sec displaying matches: 1. document=1, weight=2812, id_company=2, id_category=1263 id_company=2 id_category=1263 words: 1. 'computer': 1 documents, 2 hits 

4. Поиск из php

SetServer( "localhost", 9312 ); // Собственно поиск $cl->SetMatchMode( SPH_MATCH_ANY ); // ищем хотя бы 1 слово из поисковой фразы $result = $cl->Query("computer"); // поисковый запрос // обработка результатов запроса if ( $result === false ) < echo "Query failed: " . $cl->GetLastError() . ".\n"; // выводим ошибку если произошла > else < if ( $cl->GetLastWarning() ) < echo "WARNING: " . $cl->GetLastWarning() . " // выводим предупреждение если оно было "; > if ( ! empty($result["matches"]) ) < // если есть результаты поиска - обрабатываем их foreach ( $result["matches"] as $product =>$info ) < echo $product . "
"; // просто выводим id найденных товаров > > > exit;

Вот собственно и все, мы установили sphinx, проиндексировали нашу базу данных и написали код на php который ищет по нашей базе и выводит id найденных товаров.

Пришло время дальше изучать документацию, настраивать ранжирование как этого требует проект, и вообще продолжать перенос функционала с полнотекстового поиска на сфинкс.

Надеюсь эта статья сможет кому нибудь помочь сделать «быстрый старт» со сфинксом, потому что по-моему очень не хватает нормальных русских статей и документации по этому, довольно сложному, на мой взгляд, продукту.

Источник

Простая поисковая система на PHP

поисковая система на php

В этой статье вы прочитаете как делается поисковая система на PHP, код будет крайне просто и не большой, поэтому даже новичок поймёт.

Также стоит сказать, что мы уже делали подобную программу, но там был поиск чётких данных и больше подойдёт для админ панели, чтобы находить пользователей, чем для обычного поиска, например товаров, можете посмотреть её по это ссылки.

HTML:

Перед тем как начать разработку, нужно сделать в HTML форму, вот такую.

Тут просто HTML, не чего особенного нет, но если вам что то не понятно, то прочитайте учебник по HTML.

Подключение Базы данных:

Первым делом нужно подключить нам базу данных, для этого пишем вот этот код.

Как тут видите идёт обычное подключение, в начала мы объявляем переменные, в которых храним настройки базы данных для подключения к ней.

Дальше создаём объект классы mysqli , который используется для работы с БД, проверяем подключение, если есть ошибка, то выведем надпись с ней.

Основной код:

После того как подключили БД, переходим к запросу, вот код.

В начале мы получаем запрос из формы и ложем его в переменную $inputSearch , дальше создаём SQL запрос, и тут самое интересное, то что мы ищем по имени, но не просто, а по ближайшему совпадению, это делается благодаря знаку процента, он обозначает сколько угодно соответствий, а команда LIKE сравнивает эту строку, а точнее регулярное выражение, со всеми именами.

Потом делаем запрос к БД, и сохраняем результата в переменную $result . Дальше, перед тем как выводить данные, сделаем две функции, первая не много структурирует данные, а вторая уже выводит.

В этой функции мы немного настраиваем вывод не обязательных данных, по сути мы проверяем, если та или иная информация, и что бы не выводилось пустая строка, мы наменяем на строку «Нет данных».

Давайте разберём этот код, в качестве параметра она принимает результат запроса к БД, сперва идёт проверка, есть ли вообще строки, если их нет, то выводим надпись «Не кто не найден», если же есть, то строим цикл, в нём проходимся по всем строкам, там же и используем функцию doesItExist() .

Дальше вызываем эту функцию где-нибудь в HTML коде. там где вам надо, я же вызову её после тега form, и вот что получилось, если мы в поиск ведём просто букву «Д».

скрипт поисковой системы php

Вывод:

В этой статье вы прочитали как делается простая поисковая система на PHP, тут было только самое основное, но я уверен вы сможете её дополнить, также можете скачать скрипт этой программы, что бы самим всё проверить.

Источник

Читайте также:  Всплывающая подсказка на CSS
Оцените статью