4 # Ce script compose dynamiquement une configuration pour Sphinx. Il suffit
5 # que le fichier soit exécutable pour que Sphinx exécute le script plutôt
6 # que de le lire comme un fichier statique.
8 # Le manuel de sphinx se trouve au http://sphinxsearch.com/docs/manual-0.9.9.html
16 "%(directory)s/auf_savoirs_en_partage",
18 os
.environ
['DJANGO_SETTINGS_MODULE'] = 'production'
19 for d
in glob
.glob("%(directory)s/eggs/*"):
21 for d
in glob
.glob("%(directory)s/parts/*"):
24 from django
.conf
import settings
26 SQL_HOST
= settings
.DATABASE_HOST
27 SQL_USER
= settings
.DATABASE_USER
28 SQL_PASS
= settings
.DATABASE_PASSWORD
29 SQL_DB
= settings
.DATABASE_NAME
30 DATA_DIR
= '/var/lib/sphinxsearch/data'
33 """Place un marqueur de continuation avant chaque saut de ligne."""
34 return s
.replace("\n", "\\\n")
36 def emit_source(name
, sql_query
, sql_query_info
=None, sql_attr_multi
=None, sql_attr_uint
=None,
37 sql_attr_str2ordinal
=None):
42 sql_host = %%(sql_host)s
43 sql_user = %%(sql_user)s
44 sql_pass = %%(sql_pass)s
46 sql_query_pre = SET NAMES utf8
47 sql_query_pre = SET SESSION query_cache_type=OFF
48 sql_query = %%(sql_query)s
49 ''' %% dict(name
=name
, sql_host
=SQL_HOST
, sql_user
=SQL_USER
,
50 sql_pass
=SQL_PASS
, sql_db
=SQL_DB
, sql_query
=multiline(sql_query
))
53 print ' sql_query_info = ' + sql_query_info
56 for attr
in sql_attr_multi
:
57 print ' sql_attr_multi = uint %%s from field' %% attr
60 for attr
in sql_attr_uint
:
61 print ' sql_attr_uint = ' + attr
63 if sql_attr_str2ordinal
:
64 for attr
in sql_attr_str2ordinal
:
65 print ' sql_attr_str2ordinal = ' + attr
73 morphology = libstemmer_fr
75 charset_table = 0..9, A..Z->a..z, _, a..z, \\
76 U+C0->a, U+C2->a, U+E0->a, U+E2->a, \\
78 U+C8->e, U+C9->e, U+CA->e, U+E8->e, U+E9->e, U+EA->e, U+EB->e, \\
79 U+CE->i, U+EE->i, U+EF->i, \\
81 U+F9->u, U+FB->u, U+FC->u
84 stopwords = %(directory)s/auf_savoirs_en_partage/stopwords.txt
85 }''' %% dict(name
=name
, path
=os
.path
.join(DATA_DIR
, name
))
87 emit_source('savoirsenpartage_ressources',
90 r.description AS description,
92 r.contributor AS contributor,
94 r.publisher AS publisher,
95 TO_DAYS(r.modified) AS modified,
96 GROUP_CONCAT(DISTINCT d.nom_discipline) AS disciplines,
97 GROUP_CONCAT(DISTINCT d.id_discipline) AS discipline_ids,
98 GROUP_CONCAT(DISTINCT p.nom) AS pays,
99 GROUP_CONCAT(DISTINCT reg.nom) AS regions,
100 GROUP_CONCAT(DISTINCT reg.id) AS region_ids
101 FROM savoirs_record r
102 LEFT JOIN savoirs_record_disciplines rd ON rd.record_id = r.id
103 LEFT JOIN discipline d ON d.id_discipline = rd.discipline_id
104 LEFT JOIN savoirs_record_pays rp ON rp.record_id = r.id
105 LEFT JOIN ref_pays p ON p.id = rp.pays_id
106 LEFT JOIN savoirs_record_regions rr ON rr.record_id = r.id
107 LEFT JOIN ref_region reg ON reg.id = rr.region_id OR reg.id = p.region
108 LEFT JOIN savoirs_record_listsets rl ON rl.record_id = r.id
109 LEFT JOIN savoirs_listset l ON l.spec = rl.listset_id
110 WHERE r.validated AND (l.spec IS NULL OR l.validated)
112 sql_query_info
='SELECT * from savoirs_record WHERE id=$id',
113 sql_attr_multi
=['discipline_ids', 'region_ids'],
114 sql_attr_uint
=['modified']
117 emit_source('savoirsenpartage_actualites',
118 '''SELECT a.id_actualite AS id,
119 a.titre_actualite AS titre,
120 a.texte_actualite AS texte,
121 TO_DAYS(a.date_actualite) AS date,
122 CASE s.type WHEN 'actu' THEN 1 WHEN 'appels' THEN 2 END AS type,
123 GROUP_CONCAT(DISTINCT r.nom) AS regions,
124 GROUP_CONCAT(DISTINCT d.nom_discipline) AS disciplines
126 INNER JOIN savoirs_sourceactualite s ON s.id = a.source_id
127 LEFT JOIN actualite_regions ar ON ar.actualite_id = a.id_actualite
128 LEFT JOIN ref_region r ON r.id = ar.region_id
129 LEFT JOIN actualite_disciplines ad ON ad.actualite_id = a.id_actualite
130 LEFT JOIN discipline d ON d.id_discipline = ad.discipline_id
131 WHERE a.visible_actualite
132 GROUP BY a.id_actualite''',
133 sql_query_info
='SELECT * from actualite WHERE id_actualite=$id',
134 sql_attr_uint
=['date', 'type'],
137 emit_source('savoirsenpartage_evenements',
138 '''SELECT e.id AS id,
140 e.mots_cles AS mots_cles,
142 e.adresse AS adresse,
144 e.description AS description,
145 CONCAT_WS(e.prenom, e.nom, e.courriel, e.contact) AS contact,
147 CONCAT_WS(',', d.nom_discipline, d2.nom_discipline) AS disciplines,
148 CONCAT_WS(',', pr.nom, GROUP_CONCAT(DISTINCT r.nom)) AS regions,
149 TO_DAYS(DATE(e.debut)) AS debut
150 FROM savoirs_evenement e
151 LEFT JOIN discipline d ON d.id_discipline = e.discipline_id
152 LEFT JOIN discipline d2 ON d2.id_discipline = e.discipline_secondaire_id
153 LEFT JOIN savoirs_evenement_regions er ON er.evenement_id = e.id
154 LEFT JOIN ref_region r ON r.id = er.region_id
155 LEFT JOIN ref_pays p ON p.code = e.pays_id
156 LEFT JOIN ref_region pr ON pr.id = p.region
159 sql_query_info
='SELECT * from savoirs_evenement WHERE id=$id',
160 sql_attr_uint
=['debut'])
162 emit_source('savoirsenpartage_chercheurs',
163 '''SELECT c.personne_ptr_id AS id,
166 CONCAT(p.nom, ' ', p.prenom) AS nom_complet,
167 c.theme_recherche AS theme_recherche,
168 c.groupe_recherche AS groupe_recherche,
169 c.mots_cles AS mots_cles,
170 c.membre_instance_auf AS membre_instance_auf,
171 c.expert_oif AS expert_oif,
172 c.membre_association_francophone AS membre_association_francophone,
173 c.membre_reseau_institutionnel AS membre_reseau_institutionnel,
174 IFNULL(et.nom, etablissement_autre_nom) AS etablissement,
175 IFNULL(et.nom, etablissement_autre_nom) AS etablissement_attr,
177 pays.nom AS pays_attr,
181 GROUP_CONCAT(DISTINCT d.nom_discipline) AS disciplines,
182 GROUP_CONCAT(DISTINCT IFNULL(pub.titre, pub.publication_affichage)) AS publications,
184 GROUP_CONCAT(DISTINCT g.nom) AS groupes,
185 GROUP_CONCAT(DISTINCT ex.nom) AS expertises,
186 GROUP_CONCAT(DISTINCT g.id) AS groupe_ids,
187 TO_DAYS(c.date_modification) AS date_modification,
188 CASE pays.nord_sud WHEN 'Nord' THEN 1
191 CASE statut WHEN 'enseignant' THEN 1
192 WHEN 'etudiant' THEN 2
193 WHEN 'independant' THEN 3
195 CASE p.genre WHEN 'm' THEN 1
198 (ex.id IS NOT NULL) AS expert
199 FROM chercheurs_chercheur c
200 INNER JOIN chercheurs_personne p ON c.personne_ptr_id = p.id
201 LEFT JOIN ref_etablissement et ON et.id = c.etablissement
202 LEFT JOIN ref_pays pays ON pays.code = IFNULL(et.pays, c.etablissement_autre_pays)
203 LEFT JOIN ref_region r ON pays.region = r.id
204 LEFT JOIN discipline d ON d.id_discipline = c.discipline
205 LEFT JOIN chercheurs_publication pub ON pub.chercheur_id = c.personne_ptr_id
206 LEFT JOIN chercheurs_these t ON t.chercheur_id = c.personne_ptr_id
207 LEFT JOIN chercheurs_chercheurgroupe cg ON cg.chercheur = c.personne_ptr_id
208 LEFT JOIN chercheurs_groupe g ON g.id = cg.groupe
209 LEFT JOIN chercheurs_expertise ex ON ex.chercheur_id = c.personne_ptr_id
211 GROUP BY c.personne_ptr_id''',
212 sql_query_info
='SELECT * from chercheurs_chercheur WHERE id=$id',
213 sql_attr_multi
=['groupe_ids'],
214 sql_attr_uint
=['pays_id', 'region_id', 'nord_sud',
215 'date_modification', 'statut', 'expert',
216 'membre_instance_auf', 'expert_oif',
217 'membre_association_francophone',
218 'membre_reseau_institutionnel', 'genre', ],
219 sql_attr_str2ordinal
=['nom_complet', 'etablissement_attr', 'pays_attr', ])
221 emit_source('savoirsenpartage_sites',
222 '''SELECT s.id AS id,
224 s.description AS description,
225 s.editeur AS editeur,
227 s.mots_cles AS mots_cles,
228 GROUP_CONCAT(DISTINCT d.nom_discipline) AS disciplines,
229 GROUP_CONCAT(DISTINCT p.nom) AS pays,
230 GROUP_CONCAT(DISTINCT p.id) AS pays_ids,
231 GROUP_CONCAT(DISTINCT r.nom) AS regions,
232 TO_DAYS(s.date_maj) AS date_maj
233 FROM sitotheque_site s
234 LEFT JOIN sitotheque_site_discipline sd ON sd.site_id = s.id
235 LEFT JOIN discipline d ON d.id_discipline = sd.discipline_id
236 LEFT JOIN ref_pays p ON p.id = s.pays
237 LEFT JOIN ref_region r ON r.id = p.region
239 'SELECT * FROM sitotheque_site WHERE id=$id',
240 sql_attr_multi
=['pays_ids'],
241 sql_attr_uint
=['date_maj']
244 emit_index('savoirsenpartage_actualites')
245 emit_index('savoirsenpartage_ressources')
246 emit_index('savoirsenpartage_evenements')
247 emit_index('savoirsenpartage_chercheurs')
248 emit_index('savoirsenpartage_sites')