Pull to refresh

Comments 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?
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 примерно так, да? Остальное ясно.
Плохо работающий способ монетизации, да.
Примерно так.
портировали функцию с апи для майскл. все работает отлично уже неделю, очень даже стабильно. мы очень довольны. исправили сами баги в проекте и ура. сфинкс рулит
Слишком стабильно, я всегда это говорю!
а что слышно по поводу инкрементального индекса?
Возможно и то, а есть опыт реального использования? + ссылки?
Вау, очень жду, можно и отдельный топик забацать
Эх, не судьба. По здравому размышлению оно мне оказалось не нужно :(
Это работает, когда все имеющиеся уже в базе документы не изменяются – например, форум в котором нельзя отредактировать свое сообщение после того, как оно опубликовано.

А у меня просто сайт, в котором каждая страница может в любой момент быть изменена, стало быть, после изменения в инкрементный индекс не попадет. Можно извернуться, но у меня порядка 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» );

Примерно (примерно) так
UFO landed and left these words here
Не хотим.
В существование людей, которые НЕ могут прислать патч только потому, что у нас не git, отчего-то не верю.
UFO landed and left these words here
Задача помогать третьим лицам вести свои ветки приоритетной не является.
UFO landed and left these words here
Совет опоздал на год или даже два.
Уже пробовал разное, SVN для моих целей до сих пор удобнее всего.
UFO landed and left these words here
UFO landed and left these words here
UFO landed and left these words here
Ну лично тебе вспоминается.
А лично у меня никаких бонусов от внедрения 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, такой и в нашем, видимо.
Only those users with full accounts are able to leave comments. Log in, please.