2013-04-23 3 views
0

J'ai le scénario suivant. Supposons que j'ai une grande table comme celle-ci.Solr: Comment implémenter cette logique?

Id(unique)  returnMe    desc      name   value 
1    user1   all those living in usa  country   USA 
2.    user2   all those like game   game    football 
3.    user1   my hobbies are     hobby    guitar 

Maintenant, comment puis-je obtenir des résultats (returnMe) pour les requêtes suivantes.

1. For all those users who live in usa AND like guitar 
2. For all those users who live in usa OR like guitar. 

Veuillez ne pas modifier la requête de toute façon. Pour mon "solConfig.xml" desc "," nom "," valeur "sont des champs indexables et de recherche.

Merci pour toute aide.

Eh bien, je suis l'édition ceci pour expliquer ma logique ..

Step 1: Break query on AND like (live in USA) AND (like guitar) 
Step 2: Then select returnMes from first query and returnMes from second query. 
Step 3: Take common returnMes, returned from first query and second query. 

Est-il possible Solr peut le faire. Pouvons-nous le faire à travers Solr "rejoindre" ou non ou d'une autre façon ?? Je veux faire ça dans mon PHP, ça serait énorme.

Répondre

0

Vous allez devoir modifier la requête d'une manière ou d'une autre. Une étape simple pour analyser la requête et y ajouter des parenthèses, et éventuellement des noms de champs à rechercher. Vous pouvez transformer raisonnablement facilement ces requêtes en quelque chose comme:

(For all those users who live in usa) AND (like guitar) 
(For all those users who live in usa) OR (like guitar) 

ou vous pouvez peut-être découper « pour tous les utilisateurs qui » et ont simplement:

(live in usa) AND (like guitar) 
(live in usa) OR (like guitar) 

et définissez le champ de requête à value. Bien sûr, vous pourriez rencontrer des problèmes, si vous aviez un document avec value=users, ou quelque chose comme ça, puisqu'il cherchera chaque terme présent dans le champ value.

Si vous voulez vraiment être en mesure de travailler avec un langage naturel, que vous pouvez regarder le projet OpenNLP.

+0

Hey Merci pour vos suggestions. J'ai un peu modifié ma question pour expliquer ma logique. Pouvez-vous s'il vous plaît regarder dans cela pour m'aider. – voila

+0

Pourquoi fusionner manuellement les résultats? L'analyseur de requête Solr prend en charge la logique booléenne. Pourquoi ne pas simplement passer la requête '(vivre aux USA) ET (comme la guitare)' – femtoRgon

+0

Parce que 'AND' essaie de trouver (vivre aux Etats-Unis) et (comme la guitare) document sage (les deux requêtes devraient être présentes dans le document). Par exemple - Si je fais simplement ET sur la table ci-dessus alors je n'obtiendrai aucun résultat parce que rien du document ne satisfait à la fois la requête. Mais mon exigence est d'obtenir "user1" pour interroger "vivre aux Etats-Unis et passe-temps est la guitare" .. Toute solution. Je suis coincé dans ceci: ( – voila

Questions connexes