Как стать автором
Обновить

Комментарии 80

А я как раз сейчас настраиваю работу SphinxQL, вовремя вы
замечательно, зажигательно, познавательно. побольше бы таких статей. спасибо)
очень изящно, и со вкусом приготовлено, спасибо!
Когда-же MySQL возьмет все лучшее от Sphinx…
Продвинем идею в MariaDB?
Да это просто праздник какой-то!!! Как это всё здорово! И особенно развяжет руки то, что теперь OR тоже поддерживается.
Вынужден огорчить, но в статье написано обратное:

«Есть ряд ограничений на условия WHERE, тк. они транслируется непосредственно в фильтры; самое заметное заключется в том, что не поддерживается OR, только AND.»
Все так.
Но можно засунуть в выражение, а затем засунуть выражение в WHERE.
Ой, да… Видимо, я увидел то, что очень хотел увидеть.
Кстати, у меня вопрос есть. С версии 0.99-rc1 появилась фича SetSelect, она, как я понимаю, позволяет использовать OR при фильстрации нужных результатов поиска. Почему же OR не добавили в запросы? Это, наверное, амая востребованная фича сфинкса.
Почему не добавили, все есть.
Тут некоторое непонимание, плюс я плохо объясняю.

OR() вполне можно использовать в выражениях (!) — это которые сразу после SELECT.
В строчке WHERE напрямую нельзя — но можно посчитать такое выражение и сунуть его в WHERE.
Подскажите, поддерживается ли SUM() и AVG() c GROUP BY?
Да.
MIN() MAX() еще тоже.
SET NAMES — очень важная команда, лучше бы не заглушку, а полноценную реализацию )
Готовы проспонсировать разработку? :)
В обмен на что-нибудь — не вопрос )

Сам я не использую Сфинкс.
«Спонсирование в обмен» это как-то сложно для меня! :)
Странно, как же это не сложно для других людей, для многих проектов?)

Например, возьмите любую выставку, у каждой из них много спонсоров. И причём спонсоры тоже имеют некий профит…
Сфинкс это такой софт (бесплатный, открытый, итп).
Причем тут выставки?..
Ближайшие аналоги из мира ПО — donation-ware.

Вообще форм взаимодействия спонсоров и разработчиков много, просто лень перечислять.
Donations не работают, если чо.
Примерно совсем.

В общем, я какую мысль-то хотел донести.
Если кому вдруг нужно приделать какие-то фичи, пишите, можно обсуждать.
Читаю мануал по Сфинксу, не могу остановиться)

С чего авторы вдруг такую вещь решили бесплатно раздавать? Или коммерческие поисковики еще мощнее что ли?
мм… понимаете… я думаю что это just for fun… ну и опыт огромный…
Продать задорого пока не получается, не умеем :(
Приходится раздавать бесплатно поэтому.
Например существует схема заработка на продажах продукта, а другая — заработков на поддержке. — Чем не вариант?
Тем что можно бы зарабатывать и на том и на том :) А то понимаешь все хотят бесплаьно поюзать. а денежкой делиться не хотят.
Начни с себя, погладь кота купи саппорта!!!
А раскажите еще об поддержке Drizzle и про участие сфинксового движка в новом проекте веб-поисковика опенсорсного на базе Drizzle/Gearman/Sphinx
Они сами!
как можно hightlight найденых слов настроить в результатах поиска?
Через MYSQL протокол никак пока.
Через нативные API есть BuildExcerpts()
А есть какие-нибудь планы, в которых это «пока» превращается в «уже»? Очень уж AutoSuggest хочется делать.
Эээ.
А какая связь между генерацией сниппетов (highlight) и тем autosuggest?
Возможно, стреляю не из того ружья не по тем воробьям:

Хочу сделать поиск с AutoSuggest – ну в точности как здесь на Хабре.
Для этого приходится делать поиск фразы по мере ввода с добавлением звезды: ПАРО* найдет нам все страницы, на которых есть ПАРОХОДЫ, ПАРОВОЗЫ и ПАРОМЫ, после чего к тексту каждой найденной странице применяем BuildExcerpts и полученные в результате «огрызки» показываем в выпадающем списке.

Другого придумать не смог, а этот способ меня не устраивает по двум причинам:

а) BuildExcerpts все же вытаскивает не найденные слова в исходной форме (именительный падеж единственное число), а буквально куски текста, то есть у меня получаются: «белый ПАРОход пришвартовался», «ожидаемые ПАРОходы приплыли» и «как оказалось ПАРОходами заинтересовался» – это выглядит неприятно, хочется получать фрагменты начиная со слова «ПАРОход».

б) База данных у меня такая, что мне приходится писать довольно большой и сложный запрос в sql_query для индексатора. Для того, чтобы скормить текст в BuildExcerpts, мне приходится писать этот запрос заново, чтобы получить то, что получал индексатор. Было бы здорово, если бы индексатор умел где-нибудь сохранить тот текст, который он индексировал, в своем первозданном виде.

Или я совсем не так это делаю?
Совсем не так.
indexer --buildstops + засосать каждую строчку в базу + искать в ней (необязательно Сфинксом).

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

Там описаны все кубики.
Но как их складывать в пирамидки, это отдельное :)
Впрочем, да – вот вам и способ монетизации :)
Спасибо, что помогаете забесплатно.

То есть indexer --buildstops 100000000 примерно так, да? Остальное ясно.
Плохо работающий способ монетизации, да.
Примерно так.
портировали функцию с апи для майскл. все работает отлично уже неделю, очень даже стабильно. мы очень довольны. исправили сами баги в проекте и ура. сфинкс рулит
Слишком стабильно, я всегда это говорю!
Не поделитесь?
а что слышно по поводу инкрементального индекса?
Live index updates не то?
Возможно и то, а есть опыт реального использования? + ссылки?
Вау, очень жду, можно и отдельный топик забацать
Эх, не судьба. По здравому размышлению оно мне оказалось не нужно :(
Это работает, когда все имеющиеся уже в базе документы не изменяются – например, форум в котором нельзя отредактировать свое сообщение после того, как оно опубликовано.

А у меня просто сайт, в котором каждая страница может в любой момент быть изменена, стало быть, после изменения в инкрементный индекс не попадет. Можно извернуться, но у меня порядка 2-3 тыс документов в базе – легче каждый час всю базу перестраивать.

Прошу прощения )
Все стоит подумать и попробовать сделать флаг для изменившихся страниц, если он есть переиндексировать, для форума тоже актуально, редко закрытые топики редактируют, а если редактировался ставим флаг что топик редактировался, при росте базы, это актуально. Сейчас пока у меня база на 9 тыс. документов, другой индексатор пыхтит минут 20-ть, но это не sphinx а могло бы намного быстрее работать
Коммерческий проект со сжатыми сроками и без перспективы роста хотя бы до 6000 документов. А так конечно можно, хотя бы просто по полю даты изменения документа. Ну может дойдут руки еще.
А что есть инкрементальный индекс?
дополнение индекса на лету без обновление всего индекса, например появились 50 новых записей в базе, раз в 5-ть минут, индекс ими дополнился, понятно описал?
Спасибо! Было бы интересно посмотреть на указанный SQL-пример в виде API вызовов, чтобы было понятнее.
Ну я даже…

$client->SetSelect ( "*, @weight+userkarma*1000 AS myweight" );
$client->SetFilter ( «userid», array(123,456,98,76,54), true );
$client->SetFilter ( «hidden», array(0), true );
$client->SetFilterRange ( «postkarma», 5, 1000000000 ); // UINT_MAX, но как его там в PHP…
$client->SetGroupBy ( SPH_GROUPBY_ATTR, «userid», «myweight DESC, postdate ASC» );
$client->SetSortMode ( «myweight DESC» );
$client->SetLimit ( 100, 20 );
$client->Query ( "@title hello @content world", «mainindex, deltaindex» );

Примерно (примерно) так
НЛО прилетело и опубликовало эту надпись здесь
Не хотим.
В существование людей, которые НЕ могут прислать патч только потому, что у нас не git, отчего-то не верю.
НЛО прилетело и опубликовало эту надпись здесь
Задача помогать третьим лицам вести свои ветки приоритетной не является.
НЛО прилетело и опубликовало эту надпись здесь
Совет опоздал на год или даже два.
Уже пробовал разное, SVN для моих целей до сих пор удобнее всего.
НЛО прилетело и опубликовало эту надпись здесь
Нет, но рулю-то я.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Ну лично тебе вспоминается.
А лично у меня никаких бонусов от внедрения DVCS что-то не видать, кроме геморроя.

Вопрос решаемых задач, вкусов, итд итп.
Линусу без гита очевидно никуда!!!

Родной API это в смысле поддержку Postgres-овского протокола тоже сделать?
Нет, не занимался никто, и в планах нет.
Вопросец: при использовании API — нам возвращается вместе с результатами и число — общее количество результатов. А в случае использования sphinxQL — как лучше всего его получить?
Вы случаем не решили этот вопрос?
Шодан ответил ниже — запрос SHOW META
Ага, я сразу же заметил как написал вам вопрос и забыл написать об этом.
Спасибо.
Простите за нескромный вопрос… Но, например, я привязал демон searchd к какому-то порту, открыл этот порт TCP для публичного доступа и разрешаю некоторому удаленному клиенту соединяться с демоном для запроса информации. А потом еще другому клиенту.

А как недопустить несанкционированный доступ, можно ли провести какую-либо авторизацию? Может это и не относиться к Sphinx а относиться к администрированию серверов, но я уже извнился за нескромный вопрос.
Да, аутентификация в протоколе бы не помешала. Но и без нее жить можно. Самый простой способ ограничения доступа — на файрволе. Если нужно ограничить доступ со своих серверов, то делается все фильтрами по IP на ура. Если все-таки по какой-то причине нужна авторизация, то можно организовать ее через тоннели: вариант 1, по-проще — SSH, вариант 2, по-сложнее — VPN.
Добрый день! Когда происходит группировка, с помощью WITHIN GROUP ORDER BY можно контролировать, какой элемент в группе будет лучшим. А как выбрать не один лучший элемент, а N лучших элементов из каждой группы?
1. Правильно ли я понимаю, что правильным современным способом работы со Sphinx является SphinxQL? Т.е. при реализации нового проекта смотреть на API не смысла. Да и указание в мануале на то, что SphinxQL умеет все, что и API, но наоборот — неверно.

2. А где в мануале рассказывается про экранирование спецсинтаксиса в расширенном режиме запроса? Очевидно, что при вставке в запрос строк от пользователя, необходимо обеспечить некий уровень экранирования (в самом жестком режиме запретить все).

3. Какой клиент лучше всего использовать для работы со SphinxQL из PHP? mysqli?
SphinxQL и с нашей стороны быстрее обновляется и с клиентской проще использовать. В целом со всех сторон лучше и удобнее, я считаю.

Экранирование это один очень простой (реализация в одну строчку) метод EscapeString() в том API.

Про клиент ничего сказать не могу. «Какой лучше» в случае mysql, такой и в нашем, видимо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий