Читайте также:
|
|
Sphinx – полнотекстовая поисковая система, свободно распространяемая под GPL версией 2. Коммерческое лицензирование предоставляется по запросу.
Технически, Sphinx – автономный пакет программ, который обеспечивает быструю и полнотекстовую функциональность поиска приложениям-клиентам. Это было разработано, чтобы легко объединяться с базами данных SQL, хранящими данные и для простого доступа скриптовых языков. Однако Sphinx не требует, чтобы какая-либо определенная база данных функционировала.
Приложения могут получить доступ к демону поиска Sphinx (searchd) использующий любой из трех различных методов доступа:
1) через собственную реализацию протокола сети MySQL (использующий маленькое подмножество SQL под названием SphinxQL, это рекомендуется разработчиками);
2) через нативный API поиска (SphinxAPI);
3) через сервер MySQL с подключаемым двигателем хранения (SphinxSE).
Ключевые особенности Sphinx:
1) высокая производительность индексации и поиска;
2) доказанная масштабируемость до миллиардов документов, терабайты данных и тысячи запросов в секунду;
3) продвинутые индексация и инструменты запросов (гибкий и многофункциональный текстовый лексер, язык запросов, несколько различных способов ранжирования, и т.д.);
В настоящее время распределеннный архив Sphinx включает в себя следующее программное обеспечение:
1) индексатор (indexer): утилита, которая создает полнотекстовые индексы;
2) searchd: демон, который позволяет внешнему программному обеспечению (например, веб-приложению) искать по полнотекстовым индексам;
3) sphinxapi: набор searchd клиентских API библиотек для популярных скриптовых веб-языков (PHP, Python, Perl, Ruby).
4) spelldump: простой инструмент командной строки для извлечения элементов из ispell или MySpell словаря форматов, чтобы помочь настроить ваш индекс для использования его со словоформами.
5) indextool: утилита, необходимая, чтобы сбросить различную отладочную информацию об индексе (добавлено в 0.9.9-rc2 версии).
6) wordbreaker: утилита для разбиения сложных слов на отдельные (добавлено в версии 2.1.1). [ссылка на док-ю]
Экспорт данных из MongoDB в MySQL. Чтобы воспользоваться SphinxAPI, c помощью скрипта была создана таблица objects в базе данных museums в MySQL, содержащая поля _id (идентификатор объекта), name (имя объекта), brief (краткое описание объекта), full (полное описание объекта) и поле id типа AUTO_INCREMENT для числового уникального id строки таблицы.
Ниже приведен листинг кода:
mongoexport --db museums --collection objects --csv --fields _id, name, brief, full --out objects.csv
mysqladmin -u root -p drop museums
mysqladmin -u root -p create museums
mysql -u root -p museums -e 'create table objects (id MEDIUMINT NOT NULL AUTO_INCREMENT, _id VARCHAR(100), brief VARCHAR(10000), name VARCHAR(100), full VARCHAR(100000), primary key (id));'
mysqlimport -u root -p --local --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --lines-terminated-by='\n' --ignore-lines=1 --columns=_id,brief,name,full museums objects.csv
Данный скрипт, создающий базу данных, доступен по адресу:
https://bitbucket.org/osll/museums-indexer/src/export_csv.sh
Установка Sphinx. Sphinx индексирует источники данных в соответствии с определениями, содержащимися в файле sphinx.conf. В официальной документации есть ссылка на файл настроек [11] для различных типов данных и различных потребностей пользователя. Этот файл содержит примеры возможных настроек с комментариями. Ввиду малой информативности и стандартного набора настроек опустим содержание index objects, indexer, searchd.
Пример настройки indexer source objects:
indexer source objects {
type = mysql
sql_host = 127.0.0.1
sql_user = root
sql_pass =
sql_db = museums
sql_port = museums
sql_query_pre = SET NAMES utf-8
sql_query = SELECT * FROM objects
sql_attr_uint = name
sql_query_info = SELECT * FROM objects WHERE id=$id
}
Опция sql_query_info определяет формат вывода: какие найденного объекта будут напечатаны.
Также в searchd была добавлена строчка
listen = localhost:museums:mysql41.
Настройка listen указывает, что Sphinx будет использовать порт 3307 (это же указано и в sql_port) и протокол mysql. Такой порт был выбран при импортировании таблицы в MySQL.
Для возможности поиска на русском языке необходимо указать следующее:
1. utf-8 в sql_query_pre;
2. morphology = stem_enru, libstemmer_ru в настройке index;
3. charset_type = utf-8 в настройке index;
4. настроить charset_table.
Использование протокола mysql позволяет подключаться к Sphinx как к обычной базе данных MySQL.
Для работы с кодировкой utf-8 необходимо, чтобы:
1. Данные из MySQL приходили индексатору в UTF-8.
2. В конфигурационном файле Sphinx был прописан тип кодировки UTF-8.
3. В конфигурационном файле Sphinx была прописана правильная опция charset_table для UTF-8 (настройка данной опции можно посмотреть в документации, в данной работе она не приводится ввиду большого объема).
4. Запрос должен приходить UTF-8.
Соответственно, база данных, созданная в mysql должна быть в данной кодировке.
Для первоначальной индексации в консоли запустим команду:
sudo indexer objects
Если необходимо проиндексировать таблицу во второй раз, используется следующая команда:
sudo indexer –rotate –all
или
sudo indexer –rotate objects
Для поиска в консоли есть утилита «search»:
search –config /home/sphinx/sphinx.conf
Для запуска демона поиска необходимо использовать команду:
searchd –config /home/sphinx/sphinx.conf
Чтобы запустить консольный клиент и подключиться к Sphinx, откроем командную строку и введём команду:
mysql -u root -p museums
В последнем случае, при работе через MySQL протокол, Sphinx поддерживает обычный SQL-синтаксис. Существуют некоторые ограничения, однако могут быть использованы многие поисковые запросы.
Пример работы с Sphinx в консоли (если опустить ключ q, вывод запроса будет подробным и будет включать все индексированные поля):
search -q "Кантеле"
Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinxsearch/sphinx.conf'...
index 'objects': query 'кантеле ': returned 12 matches of 12 total in 0.000 sec
displaying matches:
1. document=730, weight=2815, name=0
2. document=769, weight=2805, name=0
3. document=522, weight=2773, name=0
4. document=169, weight=2742, name=0
5. document=2053, weight=1712, name=0
6. document=338, weight=1654, name=0
7. document=593, weight=1654, name=0
8. document=1094, weight=1654, name=0
9. document=1155, weight=1654, name=0
10. document=1358, weight=1654, name=0
11. document=1739, weight=1654, name=0
12. document=2034, weight=1654, name=8
words:
1. 'кантел': 12 documents, 44 hits
Sphinx назначает «вес» каждому результату поиска, который показывает релевантность найденного объекта. Чем больше вес, тем соответственно выше релевантность. Данную характеристику можно использовать при вычислении баллов близости при сравнении полей «Тэги», и данный способ не будет обладать нынешним недостатком вычисления: отсутствием учета семантики тэгов.
Дата добавления: 2015-10-16; просмотров: 208 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Типы рекомендаций | | | Ранжирование в Sphinx |