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

Last change on this file since 82616 was 82616, checked in by marcimat@…, 7 years ago

Il me semble qu'on peut stocker directement la limite de pagination dans l'iterateur. À vérifier.

File size: 4.9 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}       // intérroge 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* @muliple
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
82INVERSE
83-------
84
85* @syntaxe `{inverse[ sens]}`
86* @muliple
87
88Critère de SPIP surchargé
89
90----
91
92    {par date}{inverse}
93
94
95SNIPPET
96-------
97
98* @syntaxe `{snippet champ[,phrase[,limit[,as]]]}`
99* @defaut `{snippet content,'',200,snippet}`
100* @multiple
101
102Permet d'obtenir des extraits de contenu proche d'un ou des mots de la phrase transmise.
103
104Les mots, qui seront mis en gras par le snippet, sont extraits de la phrase
105en ne prenant que les caractères pertinents. Les mots ou chiffres trop courts sont
106ignorés.
107
108En absence de critère, dès que des phrases sont disponibles
109(critère recherche, filtres tags/auteurs…), un snippet est créé automatiquement
110avec les valeurs par défaut et les mots extraits de ces phrases.
111
112
113----
114
115    {snippet content}                                // calculera automatiquement les mots
116    {snippet content,#ENV*{recherche}}
117    {snippet content,#ENV*{recherche},200}
118    {snippet content,#ENV*{recherche},200,snippet}
119    {snippet content,'',200,snippet}                 // calculera automatiquement les mots
120
121
122FACET
123-----
124
125* @syntaxe `{facet alias,query}`
126* @multiple
127
128Ajoute une sous requête de facette selon la syntaxe de sphinx.
129
130----
131
132    {facet auteurs, properties.authors ORDER BY COUNT(*) DESC}
133    {facet tags, properties.tags ORDER BY COUNT(*) DESC}
134    {facet date, YEAR(date) ORDER BY date DESC}
135
136
137
138TRI SÉLECTIF
139----------------
140Exemple de tri sur une formule de calcul de « time segment », reprise ici de
141http://sphinxsearch.com/blog/2010/06/27/doing-time-segments-geodistance-searches-and-overrides-in-sphinxql/
142
143```
144#SET{tseg,
145        "*,INTERVAL(date, NOW()-90*86400, NOW()-30*86400, NOW()-7*86400, NOW()-86400, NOW()-3600) AS tseg"
146}
147<BOUCLE_recherche_sphinx(SPHINX)
148        {index #ENV{source,spip}}
149        {recherche #ENV*{recherche}}
150        {select #GET{tseg}}
151        {!par tseg}
152        {!par score}
153        {facet auteurs, properties.authors ORDER BY COUNT(*) DESC}
154        {facet tags, properties.tags ORDER BY COUNT(*) DESC}
155        {facet date, YEAR(date) ORDER BY date DESC}
156>
157```
158
159
160
161FILTRER
162-------
163
164En attendant mieux…
165
166Cette histoire de filtres n'est vraiment pas simple.
167En attendant mieux, on propose de définir la présence d'un sélect (et d'un where associé)
168si la valeur transmise possède du contenu, sinon le filtre n'est pas appliqué.
169
170Le 3è paramètre utilise une autre sélection, si la valeur vaut '-'.
171Les 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.
172
173Si `#ENV{tags}` vaut array('toto','tata'), @valeurs aura `"'toto', 'tata'"`
174
175Chaque filtre crée le where associé (filtre = 1).
176
177----
178
179    {select_filter #TRUC, select si contenu, select si '-'}
180    {select_filter #ENV{auteur}, 'IN(properties.authors, @valeurs)', 'LENGTH(properties.authors) = 0'}
181    {select_filter #ENV{tag}, 'IN(properties.tag, @valeurs)', 'LENGTH(properties.tags) = 0'}
182    {select_filter #ENV{annee}, 'YEAR(date) = @valeur' }
183   
184   
185PAGES
186-----
187
188Permet de décaler le tableau de résultats pour exploiter ensuite la pagination d'une boucle DATA avec la liste des documents.
189
190----
191
192    {pages #DEBUT_DOCUMENTS}
193    {pages #DEBUT_DOCUMENTS, 20}
Note: See TracBrowser for help on using the repository browser.