source: spip-zone/_plugins_/indexer/trunk/doc/boucle_sphinx.md @ 82622

Last change on this file since 82622 was 82622, checked in by fil@…, 5 years ago

mise a jour de la doc

File size: 5.2 KB
Line 
1
2Boucle (SPHINX)
3===============
4
5Description de la boucle SPIP (SPHINX) qui crée un itérateur
6spécifique pour intérroger des données d'un serveur sphinx.
7
8Tags utilisés dans ce document :
9
10* `@defaut x` : Le critère n'est pas obligatoire, sa valeur par défaut en absence est 'x'
11* `@unique` : Le critère ne peut être utilisé qu'une fois (la 2è utilisation écrase la première description)
12* `@multiple` : Le critère peut être présent plusieurs fois; dans ce cas, les éléments sont cumulatifs.
13* `@syntaxe` : Syntaxe du critère
14
15
16INDEX
17-----
18
19* @syntaxe `{index nom[,nom[,nom[...]]]}`
20* @defaut SPHINX_DEFAULT_INDEX.
21* @unique
22
23----
24
25    {index *}
26    {index #ENV{source,spip}}
27    {index #ENV{source,''}}    // '' prend l'index par défaut
28    {index spip,visites}       // interroge 2 index (sur le même serveur sphinx)
29
30
31SELECT
32------
33
34* @syntaxe `{select champ[,champ[,champ[...]]]}`
35* @defaut *
36* @multiple
37
38Note: Certains critères modifient également la partie SELECT de la requête.
39C'est le cas de : `{snippet ...}`, `{recherche ...}`
40
41----
42
43    {select *}
44    {select YEAR(date) AS annee}
45    {select MONTH(date) AS mois}
46
47    Les 3 peuvent aussi s'écrire :
48    {select *, YEAR(date) AS annee, MONTH(date) AS mois}
49
50
51RECHERCHE
52---------
53
54* @syntaxe `{recherche phrase[,phrase[,phrase[...]]]}`
55* @unique
56
57Si plusieurs phrases sont passées, elles seront concaténées par un espace.
58
59Note: le critère `{recherche ...}` modifie également la partie SELECT de la requête
60en ajoutant le calcul du score de recherche dans le champ `score`.
61
62----
63
64    {recherche #ENV*{recherche}}
65    {recherche #ENV*{recherche},#ENV*{phrase}}
66
67
68PAR
69---
70
71* @syntaxe `{[!]par champ[,champ[,champ[...]]]}`
72* @multiple
73
74Critère de SPIP surchargé.
75
76----
77
78    {!par date}
79    {par properties.objet, properties.id_objet}
80    {!par properties.objet, properties.id_objet}
81
82  voir aussi, plus bas, la section "tri sélectif"
83
84
85INVERSE
86-------
87
88* @syntaxe `{inverse[ sens]}`
89* @multiple
90
91Critère de SPIP surchargé
92
93----
94
95    {par date}{inverse}
96
97
98SNIPPET
99-------
100
101* @syntaxe `{snippet champ[,phrase[,limit[,as]]]}`
102* @defaut `{snippet content,'',200,snippet}`
103* @multiple
104
105Permet d'obtenir des extraits de contenu proche d'un ou des mots de la phrase transmise.
106
107Les mots, qui seront mis en gras par le snippet, sont extraits de la phrase
108en ne prenant que les caractères pertinents. Les mots ou chiffres trop courts sont
109ignorés.
110
111En absence de critère, dès que des phrases sont disponibles
112(critère recherche, filtres tags/auteurs…), un snippet est créé automatiquement
113avec les valeurs par défaut et les mots extraits de ces phrases.
114
115
116----
117
118    {snippet content}                                // calculera automatiquement les mots
119    {snippet content,#ENV*{recherche}}
120    {snippet content,#ENV*{recherche},200}
121    {snippet content,#ENV*{recherche},200,snippet}
122    {snippet content,'',200,snippet}                 // calculera automatiquement les mots
123
124
125FACET
126-----
127
128* @syntaxe `{facet alias,query}`
129* @multiple
130
131Ajoute une sous requête de facette selon la syntaxe de sphinx.
132
133----
134
135    {facet auteurs, properties.authors ORDER BY COUNT(*) DESC}
136    {facet tags, properties.tags ORDER BY COUNT(*) DESC}
137    {facet annee, YEAR(date) ORDER BY date DESC}
138          {facet favs, LENGTH(properties.share) AS favs ORDER BY FACET() DESC}
139
140
141
142TRI SÉLECTIF
143----------------
144
145## Exemple de tri sur un score calculé
146        {select WEIGHT()*(1+LENGTH(properties.share)) AS score2}
147        {!par score2}
148
149
150
151## Exemple de tri sur un « time segment »
152formule reprise de
153http://sphinxsearch.com/blog/2010/06/27/doing-time-segments-geodistance-searches-and-overrides-in-sphinxql/
154
155```
156#SET{tseg,
157        "*,INTERVAL(date, NOW()-90*86400, NOW()-30*86400, NOW()-7*86400, NOW()-86400, NOW()-3600) AS tseg"
158}
159<BOUCLE_recherche_sphinx(SPHINX)
160        {index #ENV{source,spip}}
161        {recherche #ENV*{recherche}}
162        {select #GET{tseg}}
163        {!par tseg}
164        {!par score}
165        {facet auteurs, properties.authors ORDER BY COUNT(*) DESC}
166        {facet tags, properties.tags ORDER BY COUNT(*) DESC}
167        {facet date, YEAR(date) ORDER BY date DESC}
168>
169```
170
171
172
173FILTRER
174-------
175
176En attendant mieux…
177
178Cette histoire de filtres n'est vraiment pas simple.
179En attendant mieux, on propose de définir la présence d'un select (et d'un where associé)
180si la valeur transmise possède du contenu, sinon le filtre n'est pas appliqué.
181
182Le 3è paramètre utilise une autre sélection, si la valeur vaut '-'.
183Les clés @valeur et @valeurs sont remplacés par la donnée attendue quotée, ou les données attendues quotées et séparés par des virgules.
184
185Si `#ENV{tags}` vaut array('toto','tata'), @valeurs aura `"'toto', 'tata'"`
186
187Chaque filtre crée le where associé (filtre = 1).
188
189----
190
191    {filter #TRUC, select si contenu, select si '-'}
192    {filter #ENV{auteur}, 'IN(properties.authors, @valeurs)', 'LENGTH(properties.authors) = 0'}
193    {filter #ENV{tag}, 'IN(properties.tag, @valeurs)', 'LENGTH(properties.tags) = 0'}
194    {filter #ENV{annee}, 'YEAR(date) = @valeur' }
195    {filter #ENV{favs}, @valeur <= LENGTH(properties.share)}
196
197
198
199PAGES
200-----
201
202Permet de décaler le tableau de résultats pour exploiter ensuite la pagination d'une boucle DATA avec la liste des documents.
203
204----
205
206    {pages #DEBUT_DOCUMENTS}
207    {pages #DEBUT_DOCUMENTS, 20}
Note: See TracBrowser for help on using the repository browser.