LINUX.ORG.RU — Русская информация об ОС Linux

[#]  
troop

Вышел релиз sphinx 0.9.9

Спустя год после последнего релиза 0.9.8.1 вышла новая версия полнотекстового поискового движка sphinx. Движок обладает API для PHP, Python, Java, Perl и Ruby и позволяет организовывать очень быстрый поиск.

Среди основных новшеств следует отметить:

  • реализована поддержка бинарного протокола MySQL. Теперь можно подключиться к sphinx через обычный MySQL-клиент и выполнять обычные запросы SELECT;
  • поддержка ODBC и в Windows, и в Linux;
  • разработчики добавили счетчики производительности;
  • теперь возможна перезагрузка конфигурации по SIGHUP;
  • добавлены постоянные соединения и UNIX-сокеты;
  • добавлена опция в конфиге inplace_enable, при включении которой, при индексировании нагрузка на файловую систему уменьшается в 1.5-2 раза ценой незначительного падения производительности (на 5-10%).

И индексы, и API сохранили обратную совместимость.

>>> Подробности

Метки: sphinx, sphinxsearch, поиск

troop (09.12.2009 16:41:11)
Проверено: anonymous_incognito (09.12.2009 19:44:03)
Juick

[#]  
troop

Знаю, что баян (неделя прошла с релиза), но лучше поздно, чем никогда.

Еще бы "Расстояния Левенштейна" sphinx держал и цены бы ему не было. libstemmer_c - только частичное спасение.

troop (09.12.2009 16:44:49)
[#]  

СпустИ год...

C_H_A_D_o (09.12.2009 20:12:49)
[#]  
mgdn

>произвоидительности

mgdn (09.12.2009 20:31:53)
[#]  

Отлично.

ei-grad ** (09.12.2009 20:37:55)
[#]  
amorpher

>Проверено: anonymous_incognito
о, шаман школу открыл ;)

amorpher **# (09.12.2009 20:39:30)
[#]  

> поддержка ODBC и в Windows, и в linux.

> и в Windows, и в linux.

> linux

> l

Не стыдно? А?

anonymous (09.12.2009 22:03:20)
[#] Ответ на: комментарий от anonymous 09.12.2009 22:03:20  
ostin
>>-----Цитата---->>

Не стыдно? А?

<<-----Цитата----<<

Спалился, виндузятнег

ostin *** (09.12.2009 22:05:29)
[#] Ответ на: комментарий от troop 09.12.2009 16:44:49  

> Еще бы "Расстояния Левенштейна" sphinx держал и цены бы ему не было.

цены бы ему не было при нормальной поддержке обновления индексов.

хотя для "mostly read-only"-данных - отличное решение.

pv4 * (09.12.2009 22:27:25)
[#]  

Так ведь Lucene-же!

anonymous (09.12.2009 22:31:25)
[#] Ответ на: комментарий от pv4 09.12.2009 22:27:25  
troop

Авторы работают над этим:

"we'll probably be busy building 1.x-alpha with incremental (real-time) updates for Christmas."

troop (09.12.2009 22:31:51)
[#] Ответ на: комментарий от anonymous 09.12.2009 22:31:25  
troop

У Lucene есть свои минусы. И свои плюсы.

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

Однако, сложнее интегрируется, кушает слегка больше ресурсов, гораздо медленнее индексируется.

Я бы сказал у них несколько разные ниши.

troop (09.12.2009 22:40:03)
[#] Ответ на: комментарий от ostin 09.12.2009 22:05:29  
troop

Я виндоузятник и горжусь этим. Правда на домашнем компьютере уже год не держу windows, но это мелочи, недостойные упоминания ^_^

troop (09.12.2009 22:41:41)
[#] Ответ на: комментарий от pv4 09.12.2009 22:27:25  
troop

> цены бы ему не было при нормальной поддержке обновления индексов.

Забыл упомянуть в новости еще одно немаловажный факт: в 0.9.9 появился параметр sql_query_killlist, предназначенный для удаления и обновления существующих индексов без перестройки и, в особенности, для борьбы с "фантомными" результатами.

http://www.sphinxsearch.com/docs/manual-0.9.9.html#conf-sql-query-killlist

troop (09.12.2009 22:45:45)
[#]  
Ramzes001

Вопрос

Скажите пожалуйста, у меня есть небольшой сайт со своей CMS на PHP и мне сейчас нужен поисковик.
Sphinx подойдёт или слишком громоздок для сайта где от силы страниц 100?
Заранее спасибо.

Ramzes001 * (09.12.2009 22:48:25)
[#] Ответ на: Вопрос от Ramzes001 09.12.2009 22:48:25  
troop

> Sphinx подойдёт или слишком громоздок для сайта где от силы страниц 100? Использовать можно, но смысла мало. Контента явно недостаточно, чтобы бд не справилась своими силами. Где данных мало обычно используют полнотекстный поиск, встроенный в базу данных. Сейчас почти в любой бд есть своя реализация.

troop (09.12.2009 22:50:57)
[#] Ответ на: комментарий от pv4 09.12.2009 22:27:25  
KRoN73

>цены бы ему не было при нормальной поддержке обновления индексов.

А чем дельты не нравятся? Четырёхгиговый форум индексирую так каждые 10 минут - никаких нареканий :) Раз в неделю полный реиндекс, каждые 10 минут - дельта.

KRoN73 ***** (09.12.2009 22:53:37)
[#] Ответ на: Вопрос от Ramzes001 09.12.2009 22:48:25  
KRoN73

Re: Вопрос

>Sphinx подойдёт или слишком громоздок для сайта где от силы страниц 100?

Там справится обычный LIKE :) Без индекса...

KRoN73 ***** (09.12.2009 22:54:34)
[#] Ответ на: комментарий от troop 09.12.2009 22:50:57  
Ramzes001

А при каком количестве контента есть смысл ставить подобный поисковик? Просто мой сайт быстро развивается и его наполняют длинными статьями

Ramzes001 * (09.12.2009 22:54:48)
[#] Ответ на: комментарий от KRoN73 09.12.2009 22:53:37  
troop

> А чем дельты не нравятся? Четырёхгиговый форум индексирую так каждые 10 минут - никаких нареканий :) Раз в неделю полный реиндекс, каждые 10 минут - дельта.

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

troop (09.12.2009 22:56:28)
[#] Ответ на: комментарий от troop 09.12.2009 22:56:28  
KRoN73

>Не во всех случаях данные только добавляются

А, пардон, да, не учёл.

KRoN73 ***** (09.12.2009 23:01:54)
[#] Ответ на: комментарий от Ramzes001 09.12.2009 22:54:48  
troop

>А при каком количестве контента есть смысл ставить подобный поисковик? Просто мой сайт быстро развивается и его наполняют длинными статьями

Не думаю, что на этот вопрос можно ответить однозначно. Единого критерия не существуют, требования тоже очень разнятся. Если нужен поиск с учетом морфологии и релевантности, то подобный поисковик имеет смысл ставить практически при любом количестве данных. Однако, в mysql 5.1 или pgsql 8.3 полнотекстный поиск держит стемминг, так что и здесь не все однозначно. Я являюсь админом форума с ~миллионом сообщений - там fulltext индекс mysql прекрасно справляется. sphinx я там ставил только ради морфологии и чтобы отказаться от myisam. Думаю, задумываться о таком поисковом движке вам следует только при экспоненциальном росте количества контекста.

troop (09.12.2009 23:33:10)
[#] Ответ на: комментарий от troop 09.12.2009 22:40:03  
real_maverick

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

ты забыл добавить, что еще и кластеризуема (это я про люсю)

real_maverick *** (09.12.2009 23:39:15)
[#] Ответ на: комментарий от real_maverick 09.12.2009 23:39:15  
troop

>ты забыл добавить, что еще и кластеризуема (это я про люсю)

sphinx тоже, хотя у них и разные подходы к данному вопросу. Конечно, я упомянул не все отличия, полное перечисление отличий, даже без описания, потянет на полноценную статью ^_^

troop (09.12.2009 23:46:37)
[#] Ответ на: комментарий от troop 09.12.2009 22:56:28  
Vit

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

А чем дедовский способ не канает? Делается атрибут "Deleted", который участвует во всех запросах. Атрибуты можно обновлять в любой момент. После этого хватит дельт.

killlist больше на тотальное цензурирование смахивает.

Vit ** (10.12.2009 0:20:33)
[#] Ответ на: комментарий от Vit 10.12.2009 0:20:33  
troop

>А чем дедовский способ не канает? Делается атрибут "Deleted", который участвует во всех запросах. Атрибуты можно обновлять в любой момент. После этого хватит дельт.

>killlist больше на тотальное цензурирование смахивает.

Способ, ИМХО, ничем не лучше, чем использование killlist и способ это не применим при обновлении данных (способ обновления - удаление/вставка - не рассматриваю). Про важность этого ограничения можно спорить, но, думаю, мало кто будет оспаривать то, что отсутствие обновления индекса всё-таки является недостатком.

troop (10.12.2009 0:48:57)
[#] Ответ на: комментарий от Vit 10.12.2009 0:20:33  
KRoN73

>А чем дедовский способ не канает? Делается атрибут "Deleted"

Да, я хотел предложить такой вариант. Но с ним всё равно нельзя модифицировать базу, только обновлять. Старую запись - "deleted", новую - добавлять. Не всюду удобно :)

KRoN73 ***** (10.12.2009 0:49:06)
[#] Ответ на: комментарий от Vit 10.12.2009 0:20:33  
troop

> А чем дедовский способ не канает? Делается атрибут "Deleted", который участвует во всех запросах. Атрибуты можно обновлять в любой момент. После этого хватит дельт.

Этот способ мне напоминает про другой способ, который применяют для того, чтобы обойтись без нечеткого поиска: на уровне скриптов, перед отправкой запроса в бд проходятся spellchecker`ом... Аналогия не полная, поскольку способ обхода обновления индекса быстрее и практически не отличается от обновления индеса, но и там и там требуется логика на стороне скриптов.

troop (10.12.2009 1:08:31)
[#] Ответ на: комментарий от troop 10.12.2009 0:48:57  
Vit

> Способ, ИМХО, ничем не лучше, чем использование killlist и способ это не применим при обновлении данных (способ обновления - удаление/вставка - не рассматриваю). Про важность этого ограничения можно спорить, но, думаю, мало кто будет оспаривать то, что отсутствие обновления индекса всё-таки является недостатком.

1. Как вы собрались через killist решать подобную задачу - мне вообще непонятно. Нарисуйте сначала себе на бумажке полностью. Потому что я не могу догадаться по вашим намекам о том, чего нет :)

2. Обновление именно так и делается. Старые данные метятся как удаленные, новые добавляются заново.

Данный метод не подходит только если индекс постоянно модифицируется. А во многих случаях (когда мы не строим собственный гугл), модификация почти отсутствует.

Vit ** (10.12.2009 1:35:06)
[#] Ответ на: комментарий от troop 10.12.2009 1:08:31  
Vit

> Этот способ мне напоминает про другой способ

Ну нормальные люди обычно делают прослойку, чтобы на более высоком уровне нюансы были не видны. В сфинксе стеммер встроенный и делает то же самое. Это уже культура программирования, а не нюансы поиска.

Vit ** (10.12.2009 1:39:27)
[#] Ответ на: комментарий от Vit 10.12.2009 1:39:27  
Vit

Сорри, про стеммер погорячился. Однако момент насчет скрытия подготовки входного запроса в API - в силе.

Vit ** (10.12.2009 2:35:56)
[#] Ответ на: комментарий от troop 09.12.2009 22:31:51  
Vit

> "we'll probably be busy building 1.x-alpha with incremental (real-time) updates for Christmas."

Incremental != произвольное обновление. Это добавление. Хотя могу ошибаться.

Vit ** (10.12.2009 2:49:38)
[#]  

есть и с++ интерфейс к сфинксу.

anonymous (10.12.2009 5:19:35)
[#] Ответ на: комментарий от Vit 10.12.2009 2:49:38  
troop

> Incremental != произвольное обновление. Это добавление. Хотя могу ошибаться.

Можно по-разному интерпретировать. То, что это именно произвольное обновление я сужу и по другим источникам:

http://sphinxsearch.com/forum/view.html?id=2722

* True live updates/additions/deletions
(Stated as a goal for 1.0.0)

troop (10.12.2009 6:45:43)
[#] Ответ на: комментарий от anonymous 10.12.2009 5:19:35  
troop

>есть и с++ интерфейс к сфинксу.

Забыл указать, главным образом потому что sphinx сам на c++ написан. Потом уже API портирован на другие языки: Search API is natively ported to PHP, Python, Perl, Ruby, Java.

troop (10.12.2009 6:46:22)
[#] Ответ на: комментарий от troop 10.12.2009 6:45:43  
Vit

> * True live updates/additions/deletions

Да, пожалуй выйдет еще руче, чем я расчитывал. Посмотрим как на скорости отразится. Лично мне пока за глаза хватит, если дельты уйдут и индекс будет в реалтайме доливаться.

Vit ** (10.12.2009 6:56:55)

О Сервере - Правила форума
http://www.linux.org.ru/

Rambler's Top100 Рейтинг@Mail.ru