2011-06-29 4 views
0

Je souhaite fournir des informations supplémentaires pour chaque document indexé pendant l'indexation.
Et accéder à cette information dans le même analyseur pendant l'heure de la requête pour le comparer.
Donc. Théoriquement, il serait bien d'écrire cette valeur dans un champ présent dans ce document et au moment de la requête de rechercher ce champ aussi.Solr: où stocker des informations supplémentaires?

f.e. J'ai un animal db. Je veux trouver tous les documents avec 3 mots 'chien' à l'intérieur. (Juste un exemple). Je peux configurer pour mon champ "animaux" mon Custom BaseTokenFilterFactory qui produira mon TokenFilter personnalisé qui comptera juste tous les mots "dog" et stockera ce nombre quelque part. Alors. Où puis-je stocker cette valeur pour y accéder au moment de la recherche?

Répondre

1

Votre exemple ressemble à quelque chose qui sera mieux adapté pour être géré par Similarity personnalisé ou une fonction de requête dans Solr et non pas comme un analyseur personnalisé. Par exemple si vous utilisez Solr 4.0, vous pouvez utiliser la fonction termfreq(field,term) pour classer le nombre de fois que le chien apparaît. ou vous pouvez l'utiliser comme un filtre comme ceci:

fq={!frange l=3 u=100000}termfreq(animals,"dog") 

Il filtre tous les documents dont le champ animaux ne dispose pas d'au moins 3 occurrences du mot chien. L'avantage d'utiliser cette méthode est que vous n'affectez pas la notation des documents que les filtrer.

La possibilité de filtrer par la fonction existe depuis Solr 1.4 même si vous utilisez une version antérieure de Solr (> 1.4), vous pouvez facilement écrire la fonction « termfreq » vous interroger

+0

« Solr 4.0 n'a pas encore été libéré." – denys

+0

@denys, je sais mais vous pouvez très facilement construire cette fonction vous-même, puisque l'IndexReader contient toutes les données dont vous avez besoin (fréquence, fréquence doc ...) – Asaf

+0

J'ai écrit une telle fonction mais j'ai un problème décrit à [question] (http://stackoverflow.com/q/6534949/658346) – denys

Questions connexes