2013-03-07 3 views
5

J'utilise actuellement Lucene. Mon exigence est comme la boîte de recherche de facebook. Rechercher des utilisateurs et des amis. Mais dans mon exigence utilisateur ont des paramètres de confidentialité comme le nom, l'emplacement, l'adresse e-mail sont visibles par tout le monde ou seulement les amis. Il peut montrer et cacher ces champs à des amis et à d'autres membres de la communauté.Grails Searchable Plugin - Filtrage Résultat Set

J'ai mis en œuvre une recherche simple sur la base du nom, de l'emplacement et de l'adresse e-mail. Mais maintenant je modifie la recherche sur la base des paramètres de confidentialité.

Voici mon scénario ..

utilisateur A a des paramètres de confidentialité:
Nom est visible uniquement à des amis
Email est montré à tous
emplacement n'est pas montré à personne.

Si utilisateur X emplacement type de l'utilisateur A dans la zone de recherche, alors il ne devrait pas être dans les résultats. Mais si l'utilisateur X tapez Nom de Utilisateur A dans la boîte de recherche alors il devrait être montré parce que Utilisateur A n'a pas de nom restreint et il est visible à ses amis dans les paramètres de confidentialité.

Pouvez-vous s'il vous plaît me guider à l'approche. Faites-moi savoir si je n'ai pas clairement écrit mon exigence.

J'ai analysé les approches suivantes,
expliquer de 1- IndexSearcher méthode (Il sera frappé la performance globale)
2- Filtres Mais pourrait exploré pas obtenir beaucoup

Mon approche:

Obtenez le résultatSet sur la base du nom
Obtenez le résultatSet sur la base de l'emplacement
Obtenez le résultatSet sur la base de l'adresse e-mail

Boucle sur chaque jeu de résultats et applique les conditions relatives aux paramètres de confidentialité et exclut les éléments en fonction des paramètres de confidentialité. Et à la fin, fusionner tous les 3 résultats ensemble.

S'il y a une autre approche? S'il vous plaît partager avec moi. Merci.

+0

J'ai également analyser comment fonctionne le surligneur. Mais il suffit de vérifier à partir du texte. –

Répondre

1

peut être que vous pouvez utiliser la syntaxe de requête Lucene dans plugin consultable pour créer des requêtes Lucene selon les besoins.

vous pouvez trouver here ou here

vous pouvez restreindre seaching en remplaçant les paramètres de propriété par défaut. Vous avez juste besoin d'appliquer comme ceci ....

class A { 
     String x 
     String y 
     String z 

    static searchable = [only: ['x', 'y']] 
    // … 
} 

En utilisant cela, vous pouvez restreindre les propriétés de recherche.

Questions connexes