Комментарии 80
А я как раз сейчас настраиваю работу SphinxQL, вовремя вы
+1
Шикарно :)
-1
замечательно, зажигательно, познавательно. побольше бы таких статей. спасибо)
-2
очень изящно, и со вкусом приготовлено, спасибо!
-2
Когда-же MySQL возьмет все лучшее от Sphinx…
+3
Да это просто праздник какой-то!!! Как это всё здорово! И особенно развяжет руки то, что теперь OR тоже поддерживается.
0
Вынужден огорчить, но в статье написано обратное:
«Есть ряд ограничений на условия WHERE, тк. они транслируется непосредственно в фильтры; самое заметное заключется в том, что не поддерживается OR, только AND.»
«Есть ряд ограничений на условия WHERE, тк. они транслируется непосредственно в фильтры; самое заметное заключется в том, что не поддерживается OR, только AND.»
0
Кстати, у меня вопрос есть. С версии 0.99-rc1 появилась фича SetSelect, она, как я понимаю, позволяет использовать OR при фильстрации нужных результатов поиска. Почему же OR не добавили в запросы? Это, наверное, амая востребованная фича сфинкса.
0
Подскажите, поддерживается ли SUM() и AVG() c GROUP BY?
+1
SET NAMES — очень важная команда, лучше бы не заглушку, а полноценную реализацию )
+1
Готовы проспонсировать разработку? :)
+1
В обмен на что-нибудь — не вопрос )
Сам я не использую Сфинкс.
Сам я не использую Сфинкс.
0
«Спонсирование в обмен» это как-то сложно для меня! :)
0
Странно, как же это не сложно для других людей, для многих проектов?)
Например, возьмите любую выставку, у каждой из них много спонсоров. И причём спонсоры тоже имеют некий профит…
Например, возьмите любую выставку, у каждой из них много спонсоров. И причём спонсоры тоже имеют некий профит…
0
Сфинкс это такой софт (бесплатный, открытый, итп).
Причем тут выставки?..
Причем тут выставки?..
0
Читаю мануал по Сфинксу, не могу остановиться)
С чего авторы вдруг такую вещь решили бесплатно раздавать? Или коммерческие поисковики еще мощнее что ли?
С чего авторы вдруг такую вещь решили бесплатно раздавать? Или коммерческие поисковики еще мощнее что ли?
+1
А раскажите еще об поддержке Drizzle и про участие сфинксового движка в новом проекте веб-поисковика опенсорсного на базе Drizzle/Gearman/Sphinx
+1
как можно hightlight найденых слов настроить в результатах поиска?
+1
Через MYSQL протокол никак пока.
Через нативные API есть BuildExcerpts()
Через нативные API есть BuildExcerpts()
+1
А есть какие-нибудь планы, в которых это «пока» превращается в «уже»? Очень уж AutoSuggest хочется делать.
0
Эээ.
А какая связь между генерацией сниппетов (highlight) и тем autosuggest?
А какая связь между генерацией сниппетов (highlight) и тем autosuggest?
0
Возможно, стреляю не из того ружья не по тем воробьям:
Хочу сделать поиск с AutoSuggest – ну в точности как здесь на Хабре.
Для этого приходится делать поиск фразы по мере ввода с добавлением звезды: ПАРО* найдет нам все страницы, на которых есть ПАРОХОДЫ, ПАРОВОЗЫ и ПАРОМЫ, после чего к тексту каждой найденной странице применяем BuildExcerpts и полученные в результате «огрызки» показываем в выпадающем списке.
Другого придумать не смог, а этот способ меня не устраивает по двум причинам:
а) BuildExcerpts все же вытаскивает не найденные слова в исходной форме (именительный падеж единственное число), а буквально куски текста, то есть у меня получаются: «белый ПАРОход пришвартовался», «ожидаемые ПАРОходы приплыли» и «как оказалось ПАРОходами заинтересовался» – это выглядит неприятно, хочется получать фрагменты начиная со слова «ПАРОход».
б) База данных у меня такая, что мне приходится писать довольно большой и сложный запрос в sql_query для индексатора. Для того, чтобы скормить текст в BuildExcerpts, мне приходится писать этот запрос заново, чтобы получить то, что получал индексатор. Было бы здорово, если бы индексатор умел где-нибудь сохранить тот текст, который он индексировал, в своем первозданном виде.
Или я совсем не так это делаю?
Хочу сделать поиск с AutoSuggest – ну в точности как здесь на Хабре.
Для этого приходится делать поиск фразы по мере ввода с добавлением звезды: ПАРО* найдет нам все страницы, на которых есть ПАРОХОДЫ, ПАРОВОЗЫ и ПАРОМЫ, после чего к тексту каждой найденной странице применяем BuildExcerpts и полученные в результате «огрызки» показываем в выпадающем списке.
Другого придумать не смог, а этот способ меня не устраивает по двум причинам:
а) BuildExcerpts все же вытаскивает не найденные слова в исходной форме (именительный падеж единственное число), а буквально куски текста, то есть у меня получаются: «белый ПАРОход пришвартовался», «ожидаемые ПАРОходы приплыли» и «как оказалось ПАРОходами заинтересовался» – это выглядит неприятно, хочется получать фрагменты начиная со слова «ПАРОход».
б) База данных у меня такая, что мне приходится писать довольно большой и сложный запрос в sql_query для индексатора. Для того, чтобы скормить текст в BuildExcerpts, мне приходится писать этот запрос заново, чтобы получить то, что получал индексатор. Было бы здорово, если бы индексатор умел где-нибудь сохранить тот текст, который он индексировал, в своем первозданном виде.
Или я совсем не так это делаю?
0
Совсем не так.
indexer --buildstops + засосать каждую строчку в базу + искать в ней (необязательно Сфинксом).
Подробнее распишу в следующем посте, пожалуй.
Будет хорошее дополнение к нему.
indexer --buildstops + засосать каждую строчку в базу + искать в ней (необязательно Сфинксом).
Подробнее распишу в следующем посте, пожалуй.
Будет хорошее дополнение к нему.
0
Спасибо, было бы очень здорово потому что, кажется, не вполне очевидное решение.
Или если есть в документации – ткните носом, пожалуйста.
Или если есть в документации – ткните носом, пожалуйста.
0
В документации не.
И вряд ли будет.
Там описаны все кубики.
Но как их складывать в пирамидки, это отдельное :)
И вряд ли будет.
Там описаны все кубики.
Но как их складывать в пирамидки, это отдельное :)
0
портировали функцию с апи для майскл. все работает отлично уже неделю, очень даже стабильно. мы очень довольны. исправили сами баги в проекте и ура. сфинкс рулит
0
а что слышно по поводу инкрементального индекса?
0
Live index updates не то?
0
Возможно и то, а есть опыт реального использования? + ссылки?
0
Стандартная фича, в доках: www.sphinxsearch.com/docs/current.html#live-updates
Опыт реального использования… Будет через часок )
Опыт реального использования… Будет через часок )
0
Вау, очень жду, можно и отдельный топик забацать
0
Эх, не судьба. По здравому размышлению оно мне оказалось не нужно :(
Это работает, когда все имеющиеся уже в базе документы не изменяются – например, форум в котором нельзя отредактировать свое сообщение после того, как оно опубликовано.
А у меня просто сайт, в котором каждая страница может в любой момент быть изменена, стало быть, после изменения в инкрементный индекс не попадет. Можно извернуться, но у меня порядка 2-3 тыс документов в базе – легче каждый час всю базу перестраивать.
Прошу прощения )
Это работает, когда все имеющиеся уже в базе документы не изменяются – например, форум в котором нельзя отредактировать свое сообщение после того, как оно опубликовано.
А у меня просто сайт, в котором каждая страница может в любой момент быть изменена, стало быть, после изменения в инкрементный индекс не попадет. Можно извернуться, но у меня порядка 2-3 тыс документов в базе – легче каждый час всю базу перестраивать.
Прошу прощения )
0
Все стоит подумать и попробовать сделать флаг для изменившихся страниц, если он есть переиндексировать, для форума тоже актуально, редко закрытые топики редактируют, а если редактировался ставим флаг что топик редактировался, при росте базы, это актуально. Сейчас пока у меня база на 9 тыс. документов, другой индексатор пыхтит минут 20-ть, но это не sphinx а могло бы намного быстрее работать
0
А что есть инкрементальный индекс?
0
дополнение индекса на лету без обновление всего индекса, например появились 50 новых записей в базе, раз в 5-ть минут, индекс ими дополнился, понятно описал?
0
Merge — слияние двух индексов. sphinxsearch.com/docs/current.html#index-merging
0
Слышно вот это
sphinxsearch.com/news/35.html
sphinxsearch.com/news/35.html
0
Спасибо! Было бы интересно посмотреть на указанный SQL-пример в виде API вызовов, чтобы было понятнее.
0
Ну я даже…
$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» );
Примерно (примерно) так
$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» );
Примерно (примерно) так
0
НЛО прилетело и опубликовало эту надпись здесь
Не хотим.
В существование людей, которые НЕ могут прислать патч только потому, что у нас не git, отчего-то не верю.
В существование людей, которые НЕ могут прислать патч только потому, что у нас не git, отчего-то не верю.
+1
НЛО прилетело и опубликовало эту надпись здесь
Задача помогать третьим лицам вести свои ветки приоритетной не является.
0
НЛО прилетело и опубликовало эту надпись здесь
Совет опоздал на год или даже два.
Уже пробовал разное, SVN для моих целей до сих пор удобнее всего.
Уже пробовал разное, SVN для моих целей до сих пор удобнее всего.
0
НЛО прилетело и опубликовало эту надпись здесь
Нет, но рулю-то я.
0
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Ну лично тебе вспоминается.
А лично у меня никаких бонусов от внедрения DVCS что-то не видать, кроме геморроя.
Вопрос решаемых задач, вкусов, итд итп.
Линусу без гита очевидно никуда!!!
Родной API это в смысле поддержку Postgres-овского протокола тоже сделать?
Нет, не занимался никто, и в планах нет.
А лично у меня никаких бонусов от внедрения DVCS что-то не видать, кроме геморроя.
Вопрос решаемых задач, вкусов, итд итп.
Линусу без гита очевидно никуда!!!
Родной API это в смысле поддержку Postgres-овского протокола тоже сделать?
Нет, не занимался никто, и в планах нет.
0
подключайтесь к переводу мануала:
translated.by/you/sphinx-0-9-9-reference-manual/trans/
translated.by/you/sphinx-0-9-9-reference-manual/trans/
0
Вопросец: при использовании API — нам возвращается вместе с результатами и число — общее количество результатов. А в случае использования sphinxQL — как лучше всего его получить?
0
SHOW META
0
Простите за нескромный вопрос… Но, например, я привязал демон searchd к какому-то порту, открыл этот порт TCP для публичного доступа и разрешаю некоторому удаленному клиенту соединяться с демоном для запроса информации. А потом еще другому клиенту.
А как недопустить несанкционированный доступ, можно ли провести какую-либо авторизацию? Может это и не относиться к Sphinx а относиться к администрированию серверов, но я уже извнился за нескромный вопрос.
А как недопустить несанкционированный доступ, можно ли провести какую-либо авторизацию? Может это и не относиться к Sphinx а относиться к администрированию серверов, но я уже извнился за нескромный вопрос.
0
Да, аутентификация в протоколе бы не помешала. Но и без нее жить можно. Самый простой способ ограничения доступа — на файрволе. Если нужно ограничить доступ со своих серверов, то делается все фильтрами по IP на ура. Если все-таки по какой-то причине нужна авторизация, то можно организовать ее через тоннели: вариант 1, по-проще — SSH, вариант 2, по-сложнее — VPN.
0
Добрый день! Когда происходит группировка, с помощью WITHIN GROUP ORDER BY можно контролировать, какой элемент в группе будет лучшим. А как выбрать не один лучший элемент, а N лучших элементов из каждой группы?
0
Пока никак. Но когда-нибудь мы таки сделаем sphinxsearch.com/bugs/view.php?id=64 :)
0
1. Правильно ли я понимаю, что правильным современным способом работы со Sphinx является SphinxQL? Т.е. при реализации нового проекта смотреть на API не смысла. Да и указание в мануале на то, что SphinxQL умеет все, что и API, но наоборот — неверно.
2. А где в мануале рассказывается про экранирование спецсинтаксиса в расширенном режиме запроса? Очевидно, что при вставке в запрос строк от пользователя, необходимо обеспечить некий уровень экранирования (в самом жестком режиме запретить все).
3. Какой клиент лучше всего использовать для работы со SphinxQL из PHP? mysqli?
2. А где в мануале рассказывается про экранирование спецсинтаксиса в расширенном режиме запроса? Очевидно, что при вставке в запрос строк от пользователя, необходимо обеспечить некий уровень экранирования (в самом жестком режиме запретить все).
3. Какой клиент лучше всего использовать для работы со SphinxQL из PHP? mysqli?
0
SphinxQL и с нашей стороны быстрее обновляется и с клиентской проще использовать. В целом со всех сторон лучше и удобнее, я считаю.
Экранирование это один очень простой (реализация в одну строчку) метод EscapeString() в том API.
Про клиент ничего сказать не могу. «Какой лучше» в случае mysql, такой и в нашем, видимо.
Экранирование это один очень простой (реализация в одну строчку) метод EscapeString() в том API.
Про клиент ничего сказать не могу. «Какой лучше» в случае mysql, такой и в нашем, видимо.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как готовить SphinxQL