SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Использование Sphinx
 для полнотекстового
       поиска.
Полнотекстовый?
 Полнотекстовый поиск — поиск документа в базе текстов на
         основании содержимого этих документов
Как оно работает?
Почему

● быстрый
● open source
● не требует дополнительного ПО
● специально снабжён возможностью
  хорошего взаимодействия с базами
  данных SQL
● SphinxQL
Немного статистики

~3.5 миллиона записей, ~5 GB текста
(из Wikipedia)
                          MySQL   Lucene   Sphinx

Индексация, min           1627     176       84

Индекс, MB                3011     6328    2850

Match all, ms/q            286      30       22

Match phrase, ms/q        3692      29       21

Match bool top-20, ms/q    24       29       13
Возможности

 ● высокая скорость индексации (до 10 MB/сек на
   современных процессорах)
 ● высокая скорость поиска (средний запрос
   обрабатывается менее 0.1 секунды на 2-4 GB
   текстовых коллекциях)
 ● обеспечивает хорошую релевантность путем
   сочетания ранжирования похожих фраз и статистики
   ранжирования
 ● поддержка одновременно нескольких
   дополнительных атрибутов для каждого документа
   (группы, временные метки и т.д.)
Недостатки

● “монолитные” индексы
● отсутствие документации на русском
Установка (*nix)



1.   Распаковать
2.   $ ./configure
3.   $ make
4.   $ make install
и что дальше?
Sphinx состоит из трех компонентов: генератор
индекса, поисковая система и поисковая утилита,
работающая в командной строке:
●   Генератор индекса (indexer). Он выполняет запросы к базе данных,
    индексирует каждую колонку в каждой строке результата и
    привязывает каждую запись индекса к первичному ключу строки.

●   Поисковая система представляет собой демон, который называется
    searchd.


●   Удобная утилита search позволяет выполнять поиск из командной
    строки без написания кода.
Настройка

        /usr/local/etc/sphinx.conf


● источники (source)
● индексы (index)
● конфиг демона (searchd)
Немного практики
source
source Post
{
   type               = mysql
   sql_host           = localhost
   sql_user            = sphinx
   sql_pass           = whyd0in33d1t
   sql_db             = zomg_test_forum
   sql_sock            = /tmp/mysql/mysql.sock
   sql_port            = 3306
  sql_query           = SELECT id, userId, threadId, title, text FROM Posts;
   sql_query_info     = SELECT * FROM Posts WHERE id=$id
   sql_query_range    = SELECT MIN(id), MAX(id) FROM Posts
   sql_range_step     = 500
   sql_query_pre      = SET NAMES utf8
   sql_field_string   = text
   sql_attr_multi     = uint tags from query;SELECT id FROM Tags
}
index

                               index Post
                               {
index Thread
                                    type = rt
{
                                    path = /mnt/data/Post
     type = rt
                                    rt_field = title
     path = /mnt/data/Thread
                                    rt_field = text
     rt_field = title
                                    rt_attr_string = _title
     rt_attr_string = _title
                                    rt_attr_string = _text
     rt_attr_uint = userId
                                    rt_attr_uint = threadId
    morphology = stem_enru
                                    rt_attr_uint = userId
}
                                    rt_attr_multi = tags
                                   morphology = stem_enru
                               }
searchd

searchd
{
  listen      = localhost:3307:mysql41
  port        = 3312
  log         = /etc/sphinx/searchd.log
  query_log   = /etc/sphinx/query.log
  pid_file    = /etc/sphinx/searchd.pid
}
оно работает?

$ sudo /usr/local/bin/indexer --rotate --all
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'Post'...
collected 8 docs, 0.0 MB
sorted 0.0 Mhits, 82.8% done
total 8 docs, 149 bytes
total 0.010 sec, 14900.00 bytes/sec, 800.00 docs/sec

$ /usr/local/bin/search wind
index 'Post': query 'wind ': returned 2 matches of 2 total in 0.000 sec
SphinxQL

1) SELECT * FROM Thread LIMIT 1,2

2) SELECT * FROM Post WHERE threadId = 1

3) SELECT * FROM Post WHERE match('art') ORDER BY
@weight DESC

4) SELECT _title FROM Post WHERE match('@title art')

5) SELECT * FROM Post WHERE tags in (1,2) AND match
('google')
Ранжирование (ranker)
 SELECT * FROM test WHERE MATCH('@title hello
 @body world')
 OPTION ranker=bm25, max_matches=3000,
   field_weights=(title=10, body=3)

 ●   SPH_RANK_PROXIMITY_BM25 ('proximity_bm25'), режим по умолчанию -
     учитывается близость слов и ранжирование BM25

 ●   SPH_RANK_BM25 ('bm25'), только BM25, как в большинстве других поисковых
     систем (быстрее 1го режима)

 ●   SPH_RANK_NONE ('none'), вообще без ранжирования - самый быстрый режим

 ●   SPH_RANK_WORDCOUNT ('wordcount'), простой и быстрый, считает кол-во
     совпадений
Ура?


1.   Установили Sphinx
2.   Настроили
3.   ....
4.   profit?

Más contenido relacionado

La actualidad más candente

массивы Php
массивы Phpмассивы Php
массивы PhpVasya Petrov
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsSerge Shirokov
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django моделиRoman Brovko
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)Noveo
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.
Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.
Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.DevDay
 

La actualidad más candente (11)

массивы Php
массивы Phpмассивы Php
массивы Php
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
file handling in c++
file handling in c++file handling in c++
file handling in c++
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
 
работа с файлами в с++
работа с файлами в с++работа с файлами в с++
работа с файлами в с++
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.
Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.
Межнодовое взаимодействие. Тонкости работы с Mnesia в кластере.
 

Destacado

Syllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxSyllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxAsmatullah Kakar
 
Syllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxSyllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxAsmatullah Kakar
 
Syllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxSyllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxAsmatullah Kakar
 
Chap 02 legislative procedure in pakistan
Chap 02 legislative procedure in pakistanChap 02 legislative procedure in pakistan
Chap 02 legislative procedure in pakistanAsmatullah Kakar
 
Lecture notes on unit 01.docx
Lecture notes on unit 01.docxLecture notes on unit 01.docx
Lecture notes on unit 01.docxAsmatullah Kakar
 
COMPLETE SYLLABUS OF LL.B. PART - I
COMPLETE SYLLABUS OF LL.B. PART - ICOMPLETE SYLLABUS OF LL.B. PART - I
COMPLETE SYLLABUS OF LL.B. PART - IAsmatullah Kakar
 
Chapter 1 introdution to interpretation of statutes
Chapter 1 introdution to interpretation of statutesChapter 1 introdution to interpretation of statutes
Chapter 1 introdution to interpretation of statutesAsmatullah Kakar
 
A summary of lecture notes unit 01.docx
A summary of lecture notes unit 01.docxA summary of lecture notes unit 01.docx
A summary of lecture notes unit 01.docxAsmatullah Kakar
 
Objectives of Previous Jurisprudence Papers - Answered
Objectives of Previous Jurisprudence Papers - AnsweredObjectives of Previous Jurisprudence Papers - Answered
Objectives of Previous Jurisprudence Papers - AnsweredAsmatullah Kakar
 
Jurisprudence ch.01 introduction
Jurisprudence   ch.01 introductionJurisprudence   ch.01 introduction
Jurisprudence ch.01 introductionAsmatullah Kakar
 
Personeelsuitje Paris 2012
Personeelsuitje Paris 2012Personeelsuitje Paris 2012
Personeelsuitje Paris 2012jessicarentenaar
 
Motherboards
MotherboardsMotherboards
Motherboardsceroyuno
 
Social budget 2013
Social budget 2013Social budget 2013
Social budget 2013jwalovitch
 

Destacado (20)

SB Groep
SB GroepSB Groep
SB Groep
 
Syllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxSyllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docx
 
Syllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxSyllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docx
 
Accounting2
Accounting2Accounting2
Accounting2
 
Syllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docxSyllabus and lecture plane of international law 2014.docx
Syllabus and lecture plane of international law 2014.docx
 
Chap 02 types of statutes
Chap 02 types of statutesChap 02 types of statutes
Chap 02 types of statutes
 
55663
5566355663
55663
 
Chap 02 legislative procedure in pakistan
Chap 02 legislative procedure in pakistanChap 02 legislative procedure in pakistan
Chap 02 legislative procedure in pakistan
 
Lecture notes on unit 01.docx
Lecture notes on unit 01.docxLecture notes on unit 01.docx
Lecture notes on unit 01.docx
 
COMPLETE SYLLABUS OF LL.B. PART - I
COMPLETE SYLLABUS OF LL.B. PART - ICOMPLETE SYLLABUS OF LL.B. PART - I
COMPLETE SYLLABUS OF LL.B. PART - I
 
Chapter 1 introdution to interpretation of statutes
Chapter 1 introdution to interpretation of statutesChapter 1 introdution to interpretation of statutes
Chapter 1 introdution to interpretation of statutes
 
A summary of lecture notes unit 01.docx
A summary of lecture notes unit 01.docxA summary of lecture notes unit 01.docx
A summary of lecture notes unit 01.docx
 
Chapter 1 jurisprudence
Chapter 1 jurisprudenceChapter 1 jurisprudence
Chapter 1 jurisprudence
 
Objectives of Previous Jurisprudence Papers - Answered
Objectives of Previous Jurisprudence Papers - AnsweredObjectives of Previous Jurisprudence Papers - Answered
Objectives of Previous Jurisprudence Papers - Answered
 
Jurisprudence ch.01 introduction
Jurisprudence   ch.01 introductionJurisprudence   ch.01 introduction
Jurisprudence ch.01 introduction
 
Paris 2012 SB Groep
Paris 2012 SB GroepParis 2012 SB Groep
Paris 2012 SB Groep
 
Personeelsuitje Paris 2012
Personeelsuitje Paris 2012Personeelsuitje Paris 2012
Personeelsuitje Paris 2012
 
Motherboards
MotherboardsMotherboards
Motherboards
 
Social budget 2013
Social budget 2013Social budget 2013
Social budget 2013
 
COMUNICACIÓN
COMUNICACIÓNCOMUNICACIÓN
COMUNICACIÓN
 

Similar a Sphinx search

Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Ontico
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBDmitry Viskov
 
хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreDataDmitriy Kuragin
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOSquakke
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Mikhail Kurnosov
 
Персонализация контента с помощью Yii, Sphinx и Couchbase
Персонализация контента с помощью Yii, Sphinx и CouchbaseПерсонализация контента с помощью Yii, Sphinx и Couchbase
Персонализация контента с помощью Yii, Sphinx и Couchbaseyiiconf
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...Ontico
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?Alexey Tokar
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Ontico
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
 

Similar a Sphinx search (20)

Sphinx
SphinxSphinx
Sphinx
 
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
 
Sphinx
SphinxSphinx
Sphinx
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
 
хранение данных
хранение данныххранение данных
хранение данных
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreData
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOS
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
 
Персонализация контента с помощью Yii, Sphinx и Couchbase
Персонализация контента с помощью Yii, Sphinx и CouchbaseПерсонализация контента с помощью Yii, Sphinx и Couchbase
Персонализация контента с помощью Yii, Sphinx и Couchbase
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 

Sphinx search

  • 1. Использование Sphinx для полнотекстового поиска.
  • 2. Полнотекстовый? Полнотекстовый поиск — поиск документа в базе текстов на основании содержимого этих документов
  • 4. Почему ● быстрый ● open source ● не требует дополнительного ПО ● специально снабжён возможностью хорошего взаимодействия с базами данных SQL ● SphinxQL
  • 5. Немного статистики ~3.5 миллиона записей, ~5 GB текста (из Wikipedia) MySQL Lucene Sphinx Индексация, min 1627 176 84 Индекс, MB 3011 6328 2850 Match all, ms/q 286 30 22 Match phrase, ms/q 3692 29 21 Match bool top-20, ms/q 24 29 13
  • 6. Возможности ● высокая скорость индексации (до 10 MB/сек на современных процессорах) ● высокая скорость поиска (средний запрос обрабатывается менее 0.1 секунды на 2-4 GB текстовых коллекциях) ● обеспечивает хорошую релевантность путем сочетания ранжирования похожих фраз и статистики ранжирования ● поддержка одновременно нескольких дополнительных атрибутов для каждого документа (группы, временные метки и т.д.)
  • 7. Недостатки ● “монолитные” индексы ● отсутствие документации на русском
  • 8. Установка (*nix) 1. Распаковать 2. $ ./configure 3. $ make 4. $ make install
  • 9. и что дальше? Sphinx состоит из трех компонентов: генератор индекса, поисковая система и поисковая утилита, работающая в командной строке: ● Генератор индекса (indexer). Он выполняет запросы к базе данных, индексирует каждую колонку в каждой строке результата и привязывает каждую запись индекса к первичному ключу строки. ● Поисковая система представляет собой демон, который называется searchd. ● Удобная утилита search позволяет выполнять поиск из командной строки без написания кода.
  • 10. Настройка /usr/local/etc/sphinx.conf ● источники (source) ● индексы (index) ● конфиг демона (searchd)
  • 12. source source Post { type = mysql sql_host = localhost sql_user = sphinx sql_pass = whyd0in33d1t sql_db = zomg_test_forum sql_sock = /tmp/mysql/mysql.sock sql_port = 3306 sql_query = SELECT id, userId, threadId, title, text FROM Posts; sql_query_info = SELECT * FROM Posts WHERE id=$id sql_query_range = SELECT MIN(id), MAX(id) FROM Posts sql_range_step = 500 sql_query_pre = SET NAMES utf8 sql_field_string = text sql_attr_multi = uint tags from query;SELECT id FROM Tags }
  • 13. index index Post { index Thread type = rt { path = /mnt/data/Post type = rt rt_field = title path = /mnt/data/Thread rt_field = text rt_field = title rt_attr_string = _title rt_attr_string = _title rt_attr_string = _text rt_attr_uint = userId rt_attr_uint = threadId morphology = stem_enru rt_attr_uint = userId } rt_attr_multi = tags morphology = stem_enru }
  • 14. searchd searchd { listen = localhost:3307:mysql41 port = 3312 log = /etc/sphinx/searchd.log query_log = /etc/sphinx/query.log pid_file = /etc/sphinx/searchd.pid }
  • 15. оно работает? $ sudo /usr/local/bin/indexer --rotate --all using config file '/usr/local/etc/sphinx.conf'... indexing index 'Post'... collected 8 docs, 0.0 MB sorted 0.0 Mhits, 82.8% done total 8 docs, 149 bytes total 0.010 sec, 14900.00 bytes/sec, 800.00 docs/sec $ /usr/local/bin/search wind index 'Post': query 'wind ': returned 2 matches of 2 total in 0.000 sec
  • 16. SphinxQL 1) SELECT * FROM Thread LIMIT 1,2 2) SELECT * FROM Post WHERE threadId = 1 3) SELECT * FROM Post WHERE match('art') ORDER BY @weight DESC 4) SELECT _title FROM Post WHERE match('@title art') 5) SELECT * FROM Post WHERE tags in (1,2) AND match ('google')
  • 17. Ранжирование (ranker) SELECT * FROM test WHERE MATCH('@title hello @body world') OPTION ranker=bm25, max_matches=3000, field_weights=(title=10, body=3) ● SPH_RANK_PROXIMITY_BM25 ('proximity_bm25'), режим по умолчанию - учитывается близость слов и ранжирование BM25 ● SPH_RANK_BM25 ('bm25'), только BM25, как в большинстве других поисковых систем (быстрее 1го режима) ● SPH_RANK_NONE ('none'), вообще без ранжирования - самый быстрый режим ● SPH_RANK_WORDCOUNT ('wordcount'), простой и быстрый, считает кол-во совпадений
  • 18. Ура? 1. Установили Sphinx 2. Настроили 3. .... 4. profit?