Skip to content

Instantly share code, notes, and snippets.

@NerOcrO
Last active August 10, 2019 18:34
Show Gist options
  • Save NerOcrO/0b77eff82df660bbd224 to your computer and use it in GitHub Desktop.
Save NerOcrO/0b77eff82df660bbd224 to your computer and use it in GitHub Desktop.
solr

Vider un index via l'UI

Documents->Document Type->Solr Command

<delete>
  <query>*:*</query>
</delete>

Indexing

On ne peut faire une recherche que sur un champ text.

Filter query

  • bundle:article ou l'inverse -bundle:article
  • entity_type:(profile2 OR node)
  • date:[2014-12-03T00:00:00Z TO 2014-12-03T23:59:59Z]
  • a_partir_de:[2014-12-03T00:00:00Z TO *]
  • drm_dates_evenement:"[2014-12-03T00:00:00Z TO 2015-12-03T00:00:00Z]"
  • drm_dates_evenement:2014-12-10
  • sm_auteur:"texte avec espace"
  • recip(ms(NOW,ds_field_ouvrage_date_parution),3.16e-11,1,1)^2' => y = a/mx+b
  • Différence entre gynéco et gynécologie, activer le debug mode pour voir la racine (parsedquery), le premier devra être un synonyme alors que le second a bien une racine donc trouvera tout ce qui commence par gynécolog

Sort

  • ss_nom_du_champ desc|asc (ne fonctionne pas avec du multivalué)
  • its_field_numero desc|asc (marche basiquement avec les integer)
  • Il existe des dynamic field sort_*

Parameters

stopwords

Les stopwords sont les mots insignifiants. Un mot considéré comme insignifiant sera ignoré. Attention, certains mots ne sont insignifiants que dans certains contextes, d’autres encore ont des homonymes signifiants. Par exemple ete peut renvoyer à une saison (plutôt signifiant) ou au participe passé du verbe être (plutôt insignifiant).

http://svn.apache.org/repos/asf/lucene/dev/branches/lucene_solr_3_6/solr/example/solr/conf/lang/stopwords_fr.txt

protwords

L’indexation utilise généralement la lemmatisation (stemming), qui consiste à réduire les mots à leur racine, par exemple “developp” pour retrouver aussi les articles contenant le mot développer quand on cherche avec le mot développement. Cependant, il arrive qu’il y ait des lemmatisations indésirables, indexant sous un même lemme deux mots qui n’ont aucun rapport. Il est possible d’empêcher la lemmatisation de certains mots en les listant dans un fichier protwords.txt.

mapping-FoldToASCII.txt

Permet de rechercher les caractères spéciaux. Exemple "j'apprends" ne peut pas être recherché sans ça. Remplacer dans schema.xml toutes les occurrences de mapping-ISOLatin1Accent.txt par mapping-FoldToASCII.txt.

schema.xml

Les filtres

A ajouter dans <fieldType name="text"><analyzer type="index"> ET <fieldType name="text"><analyzer type="query">. Cela peut être autre chose que du text.

  • <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/> pour gérer les caractères spéciaux
  • <filter class="solr.LengthFilterFactory" min="5" max="100" /> effectue la recherche entre 6 et 100 lettres
  • <filter class="solr.LowerCaseFilterFactory"/> recherche insensible à la casse
  • <!-- normal <filter class="solr.FrenchLightStemFilterFactory"/> --> recherche developper ou developpement avec le mot developp
  • <!-- less aggressive: <filter class="solr.FrenchMinimalStemFilterFactory"/> -->
  • <!-- more aggressive <filter class="solr.SnowballPorterFilterFactory" language="French" protected="protwords.txt"/>
  • <filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/> enlève "l'" par exemple mais ça marche sans
  • https://gist.github.com/yannvery/2f5c1b84c96fa463aebf

Les tris

A ajouter dans <fieldType name="sortString"><analyzer>

  • <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/> évite de se retrouver avec un mot commençant pas "é" à la fin

FieldType date_range

<types> ... <fieldType name="date_range" class="solr.DateRangeField"/> </types>

<fields> ... <dynamicField name="drs_*" type="date_range" indexed="true" stored="true" multiValued="false"/> <dynamicField name="drm_*" type="date_range" indexed="true" stored="true" multiValued="true"/> </fields>

Debug

  • Pour voir le score de chaque résultat : dpm($response) dans la fonction apachesolr_search_run()
  • Choper la request et la mettre dans solr et ajouter &debugQuery=on et lire "explain"
  • Regarder la partie highlighting pour voir les mots qui ressortent

Annexes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment