sphinx et gentoo

WRInaute occasionnel
bonjour,
je désire installer sphinx sur un server dedié gentoo. J'ai tapé : emerge sphinx et l'installation s'est déroulée normalement. Cependant pour que le moteur soit utilisable sur mes applications php, ildoit y avoir d'autres étapes de configuration que je ne connais pas.
Pourriez vous 'orienter dans ma démarche ?
Merci par avance
Hanlin
 
WRInaute passionné
Sphinx est le serveur, sphinx api est le client.
Il y a un fichier php disponible sur le site de sphinx permettant de faire l'interface php <=> daemon.
 
WRInaute occasionnel
apres un emerge j'obtiens

Code:
checking for types
------------------

checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for off_t... yes
checking for size_t... yes
checking whether time.h and sys/time.h may both be included... yes

checking for library functions
------------------------------

checking for pid_t... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible realloc... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking for sys/socket.h... (cached) yes
checking types of arguments for select... int,fd_set *,struct timeval *
checking return type of signal handlers... void
checking whether lstat dereferences a symlink specified with a trailing slash... yes
checking whether stat accepts an empty string... no
checking for vprintf... yes
checking for _doprnt... no
checking for library containing setsockopt... none required
checking for library containing gethostbyname... none required
checking for library containing XML_Parse... -lexpat
checking for library containing iconv... none required
checking for library containing logf... -lm
checking for dup2... yes
checking for gethostbyname... yes
checking for gettimeofday... yes
checking for memmove... yes
checking for memset... yes
checking for select... yes
checking for socket... yes
checking for strcasecmp... yes
checking for strchr... yes
checking for strerror... yes
checking for strncasecmp... yes
checking for strstr... yes
checking for strtol... yes
checking for logf... yes
checking for LOCK_EX in sys/file.h... yes
checking for F_SETLKW in fcntl.h... yes

configuring Sphinx
------------------

checking whether to compile with MySQL support... no
checking whether to compile with PostgreSQL support... no
checking whether to use 64-bit document/word IDs... no
checking whether to compile with libstemmer support... no
checking for libexpat... found
checking for libiconv... found
checking for iconv() arg types... char **
checking for unaligned RAM access... yes

generating configuration files
------------------------------

configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating libstemmer_c/Makefile
config.status: creating sphinx.conf.dist
config.status: creating sphinx-min.conf.dist
config.status: creating config/config.h
config.status: executing depfiles commands

configuration done
------------------

You can now run 'make' to build Sphinx binaries,
and then run 'make install' to install them.
----

strip: x86_64-pc-linux-gnu-strip --strip-unneeded -R .comment
   usr/bin/indexer
   usr/bin/searchd
   usr/bin/search
   usr/bin/spelldump

>>> Installing app-misc/sphinx-0.9.8.1
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

quand je lance la commande
sudo /usr/bin/indexer --config /etc/sphinx/sphinx.conf --all

J'ai ERROR: source 'catalog': unknown type 'mysql';

C'est comme si sphinx ne n'indexais pas les tables mysql.
Pourriez vous m'orienter ?
Merci
 
WRInaute passionné
Je pense que ça vient de ton fichier de configuration.
Peux-tu nous mettre ta conf (les parties "sensibles") et la partie qui traite de "catalog" ?

Il me semble qu'au premier lancement il y a une commande "spéciale" à lancer mais plus très sûr
 
WRInaute occasionnel
voila mon fichier config
Code:
source catalog
{
    type                            = mysql
    
    sql_host                        = localhost
    sql_user                        = monuser
    sql_pass                        = pass
    sql_db                          = madb
    sql_sock                        = /var/run/mysqld/mysqld.sock
    sql_port                        = 3306                  

    # indexer query
    # document_id MUST be the very first field
    # document_id MUST be positive (non-zero, non-negative)
    # document_id MUST fit into 32 bits
    # document_id MUST be unique

    sql_query                       = \
            SELECT \
                    id, partno, description, \
                    assembly, model \
            FROM \
                    Catalog;

    sql_attr_uint                = assembly
    sql_attr_uint                = model

    # document info query
    # ONLY used by search utility to display document information
    # MUST be able to fetch document info by its id, therefore
    # MUST contain '$id' macro 
    #

    sql_query_info          = SELECT * FROM Inventory WHERE id=$id
}

index catalog
{
    source                  = catalog
    path                    = /var/log/sphinx/catalog
    morphology              = stem_en

    min_word_len            = 3
    min_prefix_len          = 0
    min_infix_len           = 3
enable_star		= 1
}

searchd
{
	port				= 3312
	log				= /var/log/searchd/searchd.log
	query_log			= /var/log/searchd/query.log
	pid_file			= /var/log/searchd/searchd.pid
}
J'ai trouvé un tuto qui traite de cela mais ce n'est pas tres claire pour moi, l auteur dit que pour gentoo l'installtion est plus facile que pour les autres os mais apparemment non.
Voila sa page :
http://freelancing-god.github.com/ts/en/installing_sphinx.html
Merci encore pour votre aide
Hanlin
 
WRInaute passionné
Hum, je vois pas trop ce qui ne colle pas, voici l'un des miens :
Code:
source torsearch {
	type					= mysql
	sql_host				= 127.0.0.1
	sql_user				= database_username
	sql_pass				= password
	sql_db					= database_db
	sql_port				= 3306	# optional, default is 3306
	mysql_connect_flags			= 32 # enable compression
	sql_query_pre				= UPDATE sphinx SET counterid = 1, maxdocid = (SELECT MAX(id) FROM torrents) WHERE typ = 'torsearch';
	sql_query				= \
		SELECT id, name, category, UNIX_TIMESTAMP(added) AS added, (size / 100000) AS size, comments, times_completed, seeders, leechers \
		FROM torrents
	sql_attr_uint				= category
	sql_attr_uint				= seeders
	sql_attr_uint				= leechers
	sql_attr_uint				= size
	sql_attr_uint				= times_completed
	sql_attr_uint				= comments
	sql_attr_timestamp			= added
	sql_ranged_throttle			= 0

}
Pour la partie source.
Code:
index torsearch {
	source					= torsearch
	path					= /usr/home/sphinx/index/torsearch
	docinfo					= extern
	mlock					= 0
	morphology				= none
	# min_stemming_len			= 1
	# stopwords				= /var/data/stopwords.txt
	#wordforms				= /home/sphinx/wordforms/torindex.txt
	# exceptions				= /var/data/exceptions.txt
	min_word_len				= 1
	#charset_type				= utf-8
	#charset_table				= 0..9, A..Z->a..z, a..z, *, U+C5->U+E5, U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6
	#charset_table				= U+FF10..U+FF19->0..9, U+FF21..U+FF3A->a..z, U+FF41..U+FF5A->a..z, 0..9, A..Z->a..z, a..z
	#min_prefix_len				= 3
	min_infix_len				= 3
	infix_fields				= name
	enable_star				= 1
	html_strip				= 1
}
pour la partie index
Code:
#############################################################################
## indexer settings
#############################################################################

indexer
{
	mem_limit			= 256M
	# max_iops			= 40
	# max_iosize			= 1048576
	# max_xmlpipe2_field		= 4M
	#write_buffer			= 4M
}

#############################################################################
## searchd settings
#############################################################################

searchd
{
	listen				= 127.0.0.1:3312
	log				= /var/log/sphinxsearch/searchd.log
	query_log			= /var/log/sphinxsearch/sphinx-query.log
	read_timeout			= 2
	client_timeout			= 2
	max_children			= 30
	pid_file			= /var/run/sphinxsearch/searchd.pid
	max_matches			= 1000
	seamless_rotate			= 1
	preopen_indexes			= 1
	unlink_old			= 1
	mva_updates_pool		= 1M
	max_packet_size			= 8M
	# crash_log_path		= /var/log/crash
	max_filters			= 256
	max_filter_values		= 4096
	# listen_backlog		= 5
	# read_buffer			= 256K
	# read_unhinted			= 32K
}

Es-tu sûr que Sphinx est correctement installé ?
Au niveau de l'installation avec Gentoo, peut-être qu'il y avait une option de compil avec --with mysql ou autre car en effet, ce message d'erreur fait plutôt pensé à "pas compilé avec MySQL".
 
WRInaute occasionnel
Je ne sais vraiment pas ce qui s'est passé durant mon installation, j'ai juste fais :
emerge sphinx

penses tu qu'il faille que je desinstalle sphinx et que je refasse le tout avec l'option :
emerge sphinx --with-mysql

Je ne sais vraiment as comment procéder en fait.
 
WRInaute passionné
Je viens de tester sur une Gentoo (que je peux malheuresement pas casser)
Par défaut il s'installe bien *sans* MySQL :
Code:
[ebuild  N    ] app-misc/sphinx-0.9.8.1  USE="-debug -id64 -mysql -postgres -stemmer -test"
Code:
USE="-debug -mysql"
emerge app-misc/sphinx

Pas un pro de gentoo, mais ça devrait le faire avec le Flag USE
 
WRInaute passionné
Double post pour te dire, hésites pas à compiler avec le flag stemmer qui sert pas mal par la suite si tu veux une utilisation avancée. (j'ignore le id64 par contre).
 
WRInaute occasionnel
quand je tape :
Code:
USE="-debug -mysql"
emerge app-misc/sphinx

toujours pas de prise en compte de mysql par sphinx...hmmm vraiment pas simple cette histoire.
 
WRInaute passionné
T'as testé en "une ligne" ?
Code:
USE="-debug -mysql" emerge app-misc/sphinx
Edit : Il te faudra peut-être le --reinstall par contre
 
WRInaute occasionnel
j'ai tapé dabord :
Code:
 emerge --unmerge sphinx
J'obtiens :
Code:
app-misc/sphinx
    selected: 0.9.8.1
   protected: none
     omitted: none

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

>>> Waiting 5 seconds before starting...
>>> (Control-C to abort)...
>>> Unmerging in: 5 4 3 2 1
>>> Unmerging app-misc/sphinx-0.9.8.1...

 * GNU info directory index is up-to-date.

J'ai tapé la dernière ligne que tu as proposé mais apparemment mysql n'est toujours pas pris en compte...

Merci en tout cas de tenter
 
WRInaute passionné
hum, pas sûr que c'était la peine de le "unmerge" avec un --reinstall ça aurait dû passer.

Voilà ce que j'ai fait ce matin pour webalizer avec geoip:
Code:
LINGUAS="fr" USE="nls -apache2 geoip" emerge --verbose webalizer
Il me semble que j'avais dit de la merde, c'est "-" = pas pris en compte.
Donc tente :
Code:
USE="mysql debug" emerge --verbose app-misc/sphinx
 
Nouveau WRInaute
hello,

simple précision : ton install sphinx

tu ferez mieux de récupérer le source et le compiler, c'est très simple.

ex : ./configure --prefix=/usr --with-mysql

tu lances le démon sphinx (/usr/bin/searchd -c /ton-path-vers/sphinx.conf)

tu peux l'activer au démarrage de ton serveur au cas où avec :
/sbin/chkconfig --add sphinx

ensuite, tu configure ton .conf avec tes données mysql et le type d'indexation souhaité.
 
WRInaute occasionnel
Merci infiniment Julia41, aparemment c'est passé cette fois :
Code:
checking whether to compile with MySQL support... yes
checking for mysql_config... mysql_config
checking MySQL include files... -I/usr/include/mysql -DHAVE_ERRNO_AS_DEFINE=1
checking MySQL libraries... -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto
checking whether to compile with PostgreSQL support... no
checking whether to use 64-bit document/word IDs... no
checking whether to compile with libstemmer support... no
checking for libexpat... found
checking for libiconv... found
checking for iconv() arg types... char **
checking for unaligned RAM access... yes
Donc si je veux la prise en charge de libstemmer, je fais :
Code:
USE="libstemmer debug" emerge --verbose app-misc/sphinx
 
WRInaute passionné
Ouais, hésites pas à activer "pas mal d'option" à la compil pour sphinx.
J'ignore quelle version tu as et si ton arbre de portage est à jour mais n'hésites pas, comme l'a dit zeetv75, à partir des sources.
Dans mes souvenirs j'avais eu une bonne surprise au moment d'une "micro mise à jour" qui prenait qu'une ligne dans le changelog niveau "vitesse d'indexage".

Si tu as une grosse base de données et que tu payes ton traffic, tu regarderas pour les index de type "delta", perso je faisais le --all toutes les heures (ce qui créait un petit "manque" au niveau des derniers post), avec le delta, ça m'a permis de le faire toutes les 5 minutes en consommant moins de bande passante.
Si tu n'as pas encore trop regardé le fonctionnement des delta, grossièrement :
tu taffes sur 2 index au lieu d'1.
Ton index "gros" est celui "d'il y a 24h" et le delta est la différence entre le numéro de ta dernière indexation et de ton nouveau "max ID", il faut utiliser le sql_query_pre.
Ca marche du tonerre et c'est vraiment pas mal si ton site est énormément fréquenté et que les derniers posts sont très important.
 
Discussions similaires
Haut