2017-07-03 6 views
1

J'ai créé mon propre noyau sur http://localhost:8983/solr et ajouté quelques documents afin que je puisse interroger. Mais quand je interroge quelque chose comme "chien", je veux que les documents qui contiennent "cabot" seront retournés aussi. Je veux donc implémenter l'algorithme SVD pour améliorer mes résultats. Depuis que je suis nouveau à la chose du moteur de recherche. Tout ce que je sais, c'est que je peux utiliser Mahout pour implémenter SVD, mais cela semble un peu difficile parce que je dois installer Maven, Hadoop et Mahout. Toute suggestion sera appréciée.Quelle est la manière la plus simple d'implémenter l'algorithme SVD pour mes résultats de recherche sur Solr?

Répondre

1

Vous pouvez utiliser SynonymGraphFilterFactory

Ce filtre cartes synonymes mono ou multi-jeton, produisant une sortie graphique tout à fait correcte. Ce filtre remplace le filtre Synonym, qui produit des graphiques incorrects pour les synonymes à jetons multiples.

Si vous utilisez ce filtre pendant l'indexation, vous devez le suivre avec un filtre de graphique aplati pour écraser les jetons les uns sur les autres comme le filtre de synonymes.

Créez un fichier par exemple mysynonyms.txt dans le répertoire your_collection/conf/ et mettre les synonymes avec => signe

pooch,pup,fido => dog 
huge,ginormous,humungous => large 

et l'exemple du schéma sera:

<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/> 
    <filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters --> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/> 
</analyzer> 

Source: https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions

1

Le est une autre façon d'augmenter votre indice avec des termes pas dans le contenu. Les synonymes sont bons comme le dit @ashraful. Mais il y a 2 autres problèmes que vous courrez dans:

  1. mots utilisés mais pas dans la liste des synonymes

  2. recherche comportementale: l'utilisation d'autres comportements de l'utilisateur comme un indice à ce qu'ils recherchent

Cela vous oblige à augmenter l'index avec les termes appris de 1) autres recherches, et 2) le comportement de l'utilisateur. L'algorithme d'occurrence croisée corrélée de Mahout peut aider les deux. Vous pouvez le configurer pour trouver des termes qui mènent à des personnes lisant un article et (si vous avez quelque chose comme des données d'achat ou d'autres données de préférence) des éléments de conversion qui sont en corrélation avec les éléments de l'index. Dans le second cas, vous pouvez ajouter des conversions utilisateur à la requête de recherche pour personnaliser les résultats.

Un blog sur la technique ici: http://actionml.com/blog/personalized_search La page sur Mahout docs ici: http://mahout.apache.org/users/algorithms/intro-cooccurrence-spark.html

Vous devriez également regarder word2vec, qui (compte tenu des données de formation à droite) trouvent que « chien » et « toutou » sont des synonymes indépendamment de la liste des synonymes car il est appris à partir des données. Je ne sais pas comment vous ajoutez Word2vec à Solr mais il est intégré dans Fusion, le produit de source fermée de Lucid.

+0

je vous remercie pour votre suggestion! Je suis totalement nouveau à cela. Mais mon tuteur me demande d'implémenter SVD. Et j'ai juste installé maven, hadoop et mahout pendant 2 jours mais j'ai échoué, j'ai rencontré plein de problèmes. Et je ne connais pas d'autres moyens de mettre en place une SVD autre que le mahout, le savez-vous? –