Comments 59
Прикольно получается, когда переводят всё, включая опции:)
morphology = stem_ru
А английский вам не нужен?
morphology = stem_ru
А английский вам не нужен?
Хочу отдельно заметить что это статья — нечто вроде руководства по быстрому старту, т.е. куда что прописать чтобы сфинкс начал работать и что то искать. Тонкости настройки — тема для отдельной статьи.
Но вообще лично мне не нужна английская морфология, у меня база полностью на русском.
Но вообще лично мне не нужна английская морфология, у меня база полностью на русском.
Вы уж извините :)
Цитата из статьи:
________________________
4. Поиск из php
Ну тут все просто. Проведем, например, поиск по запросу «Computer»
________________________
Цитата из статьи:
________________________
4. Поиск из php
Ну тут все просто. Проведем, например, поиск по запросу «Computer»
________________________
Спасибо! Как-то безуспешно искал вменяемый материал на русском по сфинксу…
И как у вас с буквой ё дела обстоят?
хинт www.sphinxsearch.com/forum/view.html?id=5401
хинт www.sphinxsearch.com/forum/view.html?id=5401
А у меня следующий вопрос — как Sphinx берет данные для индексирования? Он с каким то интервалом проходит весь view catalog? Или может тригеры какие нибудь вешает в базу на изменения данных? view catalog в конечном счете может оказаться очень большим. И в каком режиме Sphinx читает view catalog — dirty read? Или он лочит все таблицы?
Это тема для отдельной статьи. Обычно держат два индекса: то что изменилось сегодня И всё остальное. Первый перестраивается раз в 5 минут и мёрджится со вторым раз в сутки.
добавлю, что смотерть в сторону дельта-индекса
уже есть Real-time index
RT это все таки изврат для избранных с небольшой базой. Ибо хранится в памяти.
Вы не правы, он частично в памяти:
==
RT индексы внутри состоят из фрагментов. Один фрагмент хранится в оперативной памяти, который хранит последние обновления. Когда размер фрагмента в RAM превышает лимит, он сбрасывается на диск, а оперативная память очищается
==
==
RT индексы внутри состоят из фрагментов. Один фрагмент хранится в оперативной памяти, который хранит последние обновления. Когда размер фрагмента в RAM превышает лимит, он сбрасывается на диск, а оперативная память очищается
==
Да, моя ошибка.
Но все таки это еще новая вещь с кучей ограничений. Если нет проблем с оперативкой — вполне можно взять обычный индекс, благо там многое кешируется. Хотя интересно было бы сравнить результаты на большой базе.
А если есть нехватка памяти, то брать RT имхо не стоит, учитывая заявленные ограничения. Всё таки бетка.
Но все таки это еще новая вещь с кучей ограничений. Если нет проблем с оперативкой — вполне можно взять обычный индекс, благо там многое кешируется. Хотя интересно было бы сравнить результаты на большой базе.
А если есть нехватка памяти, то брать RT имхо не стоит, учитывая заявленные ограничения. Всё таки бетка.
1) Зачем смешивать RT & обычные индексы? :) Распределенные вроде как нужны немножко для других целей — как правило для объединения нескольких индексов с разных машины.
2) Не указаны параметры индексов при тестировании. Обычный индекс можно загнать в ситуацию, когда он в памяти будет хранить минимум информации, а можно заставить хранить почти все. Разница в скорости и использовании винта будет на порядок.
Хотя результаты теста как раз и подтверждают мои слова чуть выше :)
RT — изврат для небольших баз. Хотя надеюсь в релизе оптимизируют.
2) Не указаны параметры индексов при тестировании. Обычный индекс можно загнать в ситуацию, когда он в памяти будет хранить минимум информации, а можно заставить хранить почти все. Разница в скорости и использовании винта будет на порядок.
Хотя результаты теста как раз и подтверждают мои слова чуть выше :)
RT — изврат для небольших баз. Хотя надеюсь в релизе оптимизируют.
Sphinx индексирует данные, когда вы запускаете indexer.
У нас он, например, запускается по крону в ночное время (основные индексы), и днём с часовым интервалов (дельта-индексы).
В любой момент через indexer --rotate-all можно обновить все данные.
У нас он, например, запускается по крону в ночное время (основные индексы), и днём с часовым интервалов (дельта-индексы).
В любой момент через indexer --rotate-all можно обновить все данные.
Для снижения нагрузки есть возможность настроить выборку интервалом:
WHERE ( id>=$start AND id записанного. дельта обновляется чаще.
два полученных индекса можно как мержить, так и оставить как есть (рекомендую второе. Сколько помню мерж — пару раз натыкался на глюки, на одной из версий помнится даже умирала база).
Отдельный геморой раньше был с удаленными записями. Но в последнем релизе придумали клевую фишку, и теперь как правило это делается просто и красиво
WHERE ( id>=$start AND id записанного. дельта обновляется чаще.
два полученных индекса можно как мержить, так и оставить как есть (рекомендую второе. Сколько помню мерж — пару раз натыкался на глюки, на одной из версий помнится даже умирала база).
Отдельный геморой раньше был с удаленными записями. Но в последнем релизе придумали клевую фишку, и теперь как правило это делается просто и красиво
Большую нагрузку создает Sphinx? Думаю его поставить на VDS
Да никакую нагрузку, только что в то время, как сканирует базу, но данную проблему легко решить, коннектясь к slave базе.
Да и индекс строится очень быстро… у меня пять миллионов записей меньше чем за 10 минут проиндексировал.
Именно поэтому и нужно на slave стучаться, у меня база мускульная гигабайта четыре, поиск идет очень быстро, но тоже не одну и не две минуты, зачем-же насиловать основную базу. Я отдельный slave держу для сфинкса и бэкапа, очень удобно :)
А это смотря сколько данных :)
В нашем случае полное индексирование проходит минут за 40, при этом на Sphinx выделено что-то около гигабайта памяти.
В нашем случае полное индексирование проходит минут за 40, при этом на Sphinx выделено что-то около гигабайта памяти.
А есть API для других ЯП? (желательно C#)
Может ссылку знаете?..
Может ссылку знаете?..
глупый вопрос, может кто ответ тут подскажет: есть папка с 10 Гб пдф документов (вперемешку с док и эксель файлами, но это не так важно) и есть относительно свободный сервер с линуксом.
как мне поставить\настроить поиск по этим документам? главная проблема: не могу сформулировать нужные запросы для гугла. куда копать, с чего начать?
как мне поставить\настроить поиск по этим документам? главная проблема: не могу сформулировать нужные запросы для гугла. куда копать, с чего начать?
Google Desktop:
desktop.google.com
desktop.google.com
1) pdf2xml
2) xml -> sphinx
3) profit
2) xml -> sphinx
3) profit
Я для поиска по сайту использую DataparkSearch Engine
Ух ты… Похоже мощная штука. Я правильно понял что у него на выходе сразу HTML страничка и нету API?
А… так он чтоли сам сайт по http сканирует? Не базу?
Вы мне объясните soundex на сфинксе по русски работает?
Если вам для спеллчекера, то советую проверку по триграммам habrahabr.ru/blogs/sphinx/61807/ — работает прелестно плюс словарь строится на основе вашего же индекса
Мне нужно решить такую задачу.
Есть текстовый запрос с декстопной программы с самыми грубыми ошибками к БД.
Есть БД наиболее употребляемых слов русского языка (например, 100 тыс. слов).
Как получить из БД список слов максимально релевантных запросу?
Например, ввели «поардох» — получили «пароход, паровоз, порох»
Есть текстовый запрос с декстопной программы с самыми грубыми ошибками к БД.
Есть БД наиболее употребляемых слов русского языка (например, 100 тыс. слов).
Как получить из БД список слов максимально релевантных запросу?
Например, ввели «поардох» — получили «пароход, паровоз, порох»
Да, метод с триграммами с этим довольно хорошо справляется. Выдает список вариантов. В архиве с исходниками сфинкса есть пример php скрипта к той статье. Дополнительный плюс, что этот метод можно собственноручно «подтюнить» (см myrank из статьи).
По крайней мере я реализовывал спеллчекер для поискового индекса крупного интернет-магазина автозапчастей. В продакшн еще не выпустили но на тестах работает отлично.
А если у вас уже база слов а не текстов, то процесс еще упрощается т.к. триграммы можно генерировать сразу из базы слов а не indexer-ом.
По крайней мере я реализовывал спеллчекер для поискового индекса крупного интернет-магазина автозапчастей. В продакшн еще не выпустили но на тестах работает отлично.
А если у вас уже база слов а не текстов, то процесс еще упрощается т.к. триграммы можно генерировать сразу из базы слов а не indexer-ом.
Soundex, как алгоритм, применим только к английскому и родственным ему языкам.
На русском же выдает такое… ужасть просто.
На русском же выдает такое… ужасть просто.
После большой и страстной любви со сфинксом и его ранкерами в своем проекте решил избавиться от него как можно быстрее.
В итоге успешно перебрался на Solr, попутно получив фасетный поиск, подсветку результатов и real-time обновления для изменившихся данных в индексе.
Да, и еще он умеет кушать .doc, .pdf и т.п. вкусные файлы :)
В итоге успешно перебрался на Solr, попутно получив фасетный поиск, подсветку результатов и real-time обновления для изменившихся данных в индексе.
Да, и еще он умеет кушать .doc, .pdf и т.п. вкусные файлы :)
Если я не ошибаюсь, достаточно подключить словарь словоформ
О, так она есть на русском! :)
А я ее читал на английском www.ibm.com/developerworks/library/os-php-sphinxsearch/
У нее есть минус что она написана для старой версии сфинкса и я когда пробовал брать из нее конфиги получал ошибки что, например, sql_group_column уже deprecated и нужно использовать другие параметры в конфиге
А я ее читал на английском www.ibm.com/developerworks/library/os-php-sphinxsearch/
У нее есть минус что она написана для старой версии сфинкса и я когда пробовал брать из нее конфиги получал ошибки что, например, sql_group_column уже deprecated и нужно использовать другие параметры в конфиге
Проблема с окончаниями решается как я понимаю подключением морфологии (morphology = stem_ru)
По крайней мере у меня по запросу «газонные решетки» находит товар «газонная решетка», по запросу «куплю газонную решетку» — тоже.
По крайней мере у меня по запросу «газонные решетки» находит товар «газонная решетка», по запросу «куплю газонную решетку» — тоже.
Дада, именно стеммер en.wikipedia.org/wiki/Stemming для этого предназначен. В сфинксе есть встроенные для английского русского чешского и еще кучу можно подключить через стороннюю библиотеку: sphinxsearch.com/docs/current.html#conf-morphology
Стемминг предназначен не того, чтобы по запросу «собакой» в результат попали документы с другими словоформами: «собака», «собаки», «собаками» и т.д.
Для поиска по маске создана директива min_infix_len. И то и то вещи похожие но все же разные
Для поиска по маске создана директива min_infix_len. И то и то вещи похожие но все же разные
Смотрите в сторону min_infix_len — этот параметр как раз для ваших целей и предназначен
Спасибо большое за статью, пишите по сфинксу ещё :)
не за что:)
Пока особо нечего писать, добавил исправление ошибок в запросах с использованием триграмм и все работает :) т.к. поисковых запрсов на сайте немного (порядка 100 в день) то на доработку поиска пока не заморачиваемся, сконцентрировав внимание на более актуальных частях проекта.
Как только что — сразу напишу :)
Пока особо нечего писать, добавил исправление ошибок в запросах с использованием триграмм и все работает :) т.к. поисковых запрсов на сайте немного (порядка 100 в день) то на доработку поиска пока не заморачиваемся, сконцентрировав внимание на более актуальных частях проекта.
Как только что — сразу напишу :)
Sign up to leave a comment.
Создание ознакомительного поискового движка на Sphinx + php