Страницы

Поиск по вопросам

Показаны сообщения с ярлыком sphinx. Показать все сообщения
Показаны сообщения с ярлыком sphinx. Показать все сообщения

воскресенье, 8 декабря 2019 г.

Как использовать Sphinx в Yii2 + PostgreSQL?

#php #yii2 #postgresql #yii #sphinx


Не до конца понимаю, возможно ли использование Sphinxsearch в Yii2 в качестве поискового
движка в связке с PostgreSQL? В экстеншене: Yii2-sphinx говорится про MySQL, но про
PgSQL ни слова. Сам экстеншен устанавливается, и конфиг вида:

'components' => [
    'sphinx' => [
        'class' => 'yii\sphinx\Connection',
        'dsn' => 'pgsql:host=localhost;port=5432;dbname=testdb',
        'username' => 'yii',
        'password' => '********',
    ],
]


ошибок не вызывает, даже при отсутствии Sphinx на сервере.
В связи с вышеизложенным возникает ряд вопросов:


Подходит ли данный экстеншен для использования его с PgSQL. Если да, где про это
можно почитать, или посмотреть реальные примеры (Yii2 + PgSQL + Sphinx)?
Стоит ли использовать его, или лучше что-то другое, вроде: pg-sphinx?
Стоит ли вообще его использовать, быть может есть решения быстрее и проще?


Стэк: Debian, Nginx, FPM, PHP7, Yii2, PgSQL

UPD Вопрос всё ещё актуален! :)
    


Ответы

Ответ 1



Первая фраза по ссылке yii2-sphinx в блоке Configuration, говорит о том, что используется только протокол MySQL: This extension interacts with Sphinx search daemon using MySQL protocol and SphinxQL query language. По идее, Вы можете попробовать добавить 'pgsql' => 'yii\sphinx\Schema' в массив $schemaMap, в файле Connection.php (в основной директории модуля), и, скорее всего простые запросы даже будут отрабатывать, но, как только будет более-менее сложный запрос, гарантирую, что Вы получите ошибку. Лучшим вариантом будет использование расширения pg-sphinx или похожее, если Вам действительно нужен Sphinx. В противном случае, попробуйте обычный полнотекстовый поиск, возможно, для ваших целей хватит и его.

суббота, 22 июня 2019 г.

Как скомпилировать расширение sphinxsearch под HHVM?

http://sphinxsearch.com/
Как скомпилировать расширение sphinxsearch client под HHVM? При попытке воспользоваться расширением, ранее используемым на php-fpm, выдает ошибку:
Uncaught exception: Could not open extension /usr/lib/php5/20121212/sphinx.so: /usr/lib/php5/20121212/sphinx.so: undefined symbol: zend_new_interned_string
По информации источника http://hhvm.h4cc.de/package/lostcause/sphinxsearch состояние библиотеки Not tested
Нашел мануал Converting a PHP Extension to HHVM (не заморочился) http://www.sklar.com/software/php/2015/05/07/converting-a-php-extension-to-hhvm/


Ответ

В качестве решения проблемы воспользовался библиотекой Sphinx Search PHP Client. Устанавливается через Composer, класс SphinxClient доступен в пространстве имен Sphinx. Протестировано, работает.
https://github.com/gigablah/sphinxphp

пятница, 12 октября 2018 г.

Почему один индекс Sphinx возвращает атрибуты вместе со значениями, другой - нет?

В моем конфиге настроены 2 индекса на индексацию 2-х таблиц MySQL:
#medicalfacilities source medicalfacilities : lsParentSource {
sql_query_range = SELECT MIN(idMedicalFacilities), MAX(idMedicalFacilities) FROM
medicalfacilities sql_range_step = 128
sql_query = SELECT idMedicalFacilities * 10 + 1 as id, 2000 as type,
idmedicalfacilities, MedicalFacilitiesName, medicalfacilitiesiduser, medicalfacilitiessite,
medicalfacilitiesemail, medicalfacilitiesphoto FROM medicalfacilities WHERE
idMedicalFacilities>=$start AND idMedicalFacilities<=$end
sql_attr_uint = idmedicalfacilities sql_attr_uint = type sql_attr_uint = MedicalFacilitiesIdUser sql_field_string = MedicalFacilitiesSite sql_field_string = MedicalFacilitiesName sql_field_string = MedicalFacilitiesPhoto sql_field_string = MedicalFacilitiesEmail sql_query_info = SELECT MedicalFacilitiesName, MedicalFacilitiesDescription \ FROM medicalfacilities WHERE idMedicalFacilities = ($id - 1) / 10
# Время засыпания в миллисекундах (sleep) перед отправкой запросов серверу (может быть
полезно для разгрузки сервера базы данных) sql_ranged_throttle = 0 }

#users source users : lsParentSource {
sql_query_range = SELECT MIN(idDetailToUsers), MAX(idDetailToUsers) FROM detailtousers sql_query = SELECT idDetailToUsers as id, 1000 as type, UsersTypeAccount,
idDetailToUsers, SpecializationName, DetailToUsersName, DetailToUsersPhoto, city, country FROM
detailtousers join users ON users.idUsers = detailtousers.idDetailToUsers left join
usersspecialization ON usersspecialization.UsersSpecializationIdUser =
detailtousers.idDetailToUsers left join specializationtousers ON
specializationtousers.idSpecialization = usersspecialization.UsersSpecializationIdSpecialization
WHERE idDetailToUsers >= $start AND idDetailToUsers <= $end GROUP BY idDetailToUsers
sql_attr_uint = type sql_attr_uint = idDetailToUsers sql_attr_uint = UsersTypeAccount sql_field_string = SpecializationName sql_field_string = DetailToUsersName sql_field_string = DetailToUsersPhoto sql_attr_uint = city sql_attr_uint = country
sql_query_info = SELECT idDetailToUsers, DetailToUsersName, UsersTypeAccount,
SpecializationName, DetailToUsersPhoto, city, country \ FROM detailtousers WHERE idDetailToUsers = $id sql_ranged_throttle = 0 }
Индексы:
index medicalfacilities { source = medicalfacilities path = /var/data/sphinx/medicalfacilities #enable_star = 1 charset_type = utf-8 html_strip = 1 #morphology = stem_ru min_word_len = 3 min_prefix_len = 3 #min_infix_len = 3 }
index users_index { docinfo = extern source = users path = /var/data/sphinx/users charset_type = utf-8 html_strip = 1 morphology = stem_enru min_word_len = 1 min_prefix_len = 0 min_infix_len = 1 enable_star = 1 }
Для индекса users возвращаются атрибуты со значениями, а для medicalfacilities - без.


Ответ

На первый взгляд проблема в этой части
sql_query_info = SELECT MedicalFacilitiesName, MedicalFacilitiesDescription \ FROM medicalfacilities WHERE idMedicalFacilities = ($id - 1) / 10
Зачем нужно выражение ($id - 1) / 10 ? Может заменить его на $id?
Кроме того у сфинкса есть SphinxQL. Т.е. можно писать запросы в него как в MySQL. Работает по протоколу mysql(т.е. можно присоединиться обычным mysql клиентом по указанному порту).
http://sphinxsearch.com/docs/latest/sphinxql.html

Как использовать Sphinx в Yii2 + PostgreSQL?

Не до конца понимаю, возможно ли использование Sphinxsearch в Yii2 в качестве поискового движка в связке с PostgreSQL? В экстеншене: Yii2-sphinx говорится про MySQL, но про PgSQL ни слова. Сам экстеншен устанавливается, и конфиг вида:
'components' => [ 'sphinx' => [ 'class' => 'yii\sphinx\Connection', 'dsn' => 'pgsql:host=localhost;port=5432;dbname=testdb', 'username' => 'yii', 'password' => '********', ], ]
ошибок не вызывает, даже при отсутствии Sphinx на сервере. В связи с вышеизложенным возникает ряд вопросов:
Подходит ли данный экстеншен для использования его с PgSQL. Если да, где про это можно почитать, или посмотреть реальные примеры (Yii2 + PgSQL + Sphinx)? Стоит ли использовать его, или лучше что-то другое, вроде: pg-sphinx? Стоит ли вообще его использовать, быть может есть решения быстрее и проще?
Стэк: Debian, Nginx, FPM, PHP7, Yii2, PgSQL
UPD Вопрос всё ещё актуален! :)


Ответ

Первая фраза по ссылке yii2-sphinx в блоке Configuration, говорит о том, что используется только протокол MySQL:
This extension interacts with Sphinx search daemon using MySQL protocol and SphinxQL query language.
По идее, Вы можете попробовать добавить 'pgsql' => 'yii\sphinx\Schema' в массив $schemaMap, в файле Connection.php (в основной директории модуля), и, скорее всего простые запросы даже будут отрабатывать, но, как только будет более-менее сложный запрос, гарантирую, что Вы получите ошибку.
Лучшим вариантом будет использование расширения pg-sphinx или похожее, если Вам действительно нужен Sphinx. В противном случае, попробуйте обычный полнотекстовый поиск, возможно, для ваших целей хватит и его.