- Saved searches
- Use saved searches to filter your results more quickly
- gigablah/sphinxphp
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Создание ознакомительного поискового движка на Sphinx + php
- 2. Установка Sphinx
- 3. Индексирование и тестовый поиск
- 4. Поиск из php
- Saved searches
- Use saved searches to filter your results more quickly
- License
- nilportugues/php-sphinx-search
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Работа с Sphinx: как создать поисковую систему на 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.
Sphinx Search Client for PHP 5.3+
gigablah/sphinxphp
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
[Sphinx] 1 is an open source full-text search engine.
This project contains a refactored Sphinx PHP client with some minor differences:
- Compatibility with [Composer] 2
- Compliance with [PSR standards] 3
- Fluent (chainable) setter functions
- PHPUnit tests
Create a composer.json file and run composer install :
Refer to the official [documentation] 4.
Note: public functions have been changed to lower camelcase in accordance with PSR-1.
GNU General Public License version 2 ([GPL-2.0] 5)
About
Sphinx Search Client for PHP 5.3+
Создание ознакомительного поискового движка на 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 найденных товаров.
Пришло время дальше изучать документацию, настраивать ранжирование как этого требует проект, и вообще продолжать перенос функционала с полнотекстового поиска на сфинкс.
Надеюсь эта статья сможет кому нибудь помочь сделать «быстрый старт» со сфинксом, потому что по-моему очень не хватает нормальных русских статей и документации по этому, довольно сложному, на мой взгляд, продукту.
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.
Sphinx for PHP 5.3 and above. Fully PHPUnit tested.
License
nilportugues/php-sphinx-search
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
Sphinx for PHP 5.3 and above
This class is a port of the original Sphinx API class by Andrew Aksyonoff and Sphinx Technologies Inc to PHP 5.3 and above.
While all the existing methods are available and vastly documented in the Sphinx Documentation, this version of the SphinxClient for PHP includes a new method.
- removeFilter: The original SphinxClient allows you to clear all filters. This method removes a specific filter previously set.
$sphinxSearch = new \NilPortugues\Sphinx\SphinxClient(); //Do connection and set up search method. $sphinxSearch->setServer('127.0.0.1',9312); // Do search. // Result would contain "The Amazing Spider-Man 2", to be in theatres in 2014. $sphinxSearch->setFilter('year',array(2014)); $result = $sphinxSearch->query('Spiderman','movies'); // Unset the filter to stop filtering by year // Now we'll get all the Spiderman movies. $sphinxSearch->removeFilter('year'); $result = $sphinxSearch->query('Spiderman','movies');
3. Added chainable methods
While updating the code, chaining capability has been added. SphinxClient’s setters can be chained resulting in a cleaner code.
$sphinxSearch = new \NilPortugues\Sphinx\SphinxClient(); $result = $sphinxSearch ->setFilter('year',array(2014)) ->query('Spiderman','movies') ;
Работа с Sphinx: как создать поисковую систему на PHP.
Sphinx — это бесплатная и открытая система поиска текстового контента, которая позволяет создавать высокопроизводительные поисковые решения. Sphinx может использоваться для индексации и поиска различных типов данных, таких как текст, числа, даты и файлы.
В данной статье мы рассмотрим, как использовать Sphinx для создания поисковой системы на PHP.
Перед началом работы с Sphinx необходимо его установить. Для этого необходимо выполнить следующие шаги:
1. Скачать дистрибутив Sphinx с официального сайта: http://sphinxsearch.com/downloads/
2. Распаковать архив в удобной для вас директории.
3. Перейти в директорию, где вы распаковали архив, и выполнить следующие команды:
$ ./configure $ make $ make install
4. Проверить, что Sphinx успешно установлен, можно выполнением команды:
Если команда выполняется успешно и выводится справка по использованию searchd, то Sphinx установлен корректно.
Перед тем, как использовать Sphinx для поиска данных, необходимо проиндексировать данные, которые будут искаться. В Sphinx процесс индексации очень быстрый и позволяет обрабатывать огромные объемы данных.
Для индексации данных необходимо выполнить следующие шаги:
1. Создать конфигурационный файл для Sphinx. Пример конфигурационного файла может выглядеть следующим образом:
source src1 < type = mysql sql_host = localhost sql_user = root sql_pass = sql_db = mydatabase sql_port = 3306 sql_query = \ SELECT id, title, content \ FROM mytable sql_attr_uint = group_id >index myindex < source = src1 path = /usr/local/sphinx/data/myindex min_word_len = 1 min_infix_len = 1 morphology = stem_en charset_type = utf-8 charset_table = 0..9, A..Z->a..z, _, a..z, \ U+410..U+42F->U+430..U+44F, U+430..U+44F > searchd < listen = 9312:mysql41 log = /var/log/searchd.log query_log = /var/log/query.log pid_file = /var/run/searchd.pid >
2. Сохранить конфигурационный файл и выполнить команду для индексации данных:
$ indexer --config /path/to/sphinx.conf --all
3. Дождаться завершения процесса индексации.
После того, как данные проиндексированы, можно выполнить поиск данных. В Sphinx для этого используется searchd — демон, который обрабатывает запросы пользователя и возвращает результат поиска.
Для выполнения поиска данных необходимо выполнить следующие шаги:
1. Создать скрипт на PHP, который будет выполнять запрос к searchd. Пример кода скрипта может выглядеть следующим образом:
SetServer("localhost", 9312); $cl->SetMatchMode(SPH_MATCH_ANY); $cl->SetSortMode(SPH_SORT_RELEVANCE); $cl->SetLimits(0, 1000); $cl->SetArrayResult(true); $result = $cl->Query("my query", "myindex"); print_r($result); ?>
В данном примере мы используем SphinxClient — класс, который предоставляет доступ к функциям Sphinx.
2. Запустить скрипт на выполнение.
3. Просмотреть результаты поиска в выходных данных скрипта.
Sphinx — это мощная и эффективная система поиска, которая позволяет создавать высокопроизводительные поисковые решения. В данной статье мы рассмотрели, как использовать Sphinx для создания поисковой системы на PHP. Если вы работаете с большими объемами данных и нуждаетесь в быстром и эффективном поисковом решении, то Sphinx может быть идеальным выбором для вас.