2012-01-11 6 views
0

J'ai une instance SOLR avec des millions de documents. Le schéma est bien défini (c'est-à-dire que tous les champs sont tapés). Toute la recherche/facette etc. fonctionne bien sans aucun problème.Requête d'analyse SOLR

Cependant, j'essaie de faire quelque chose de nouveau que je "pense" n'est pas supporté dans la version actuelle. J'utilise SOLR 3.5 sous Windows en utilisant Jetty.

Pour simplifier la question, mon document contient certains domaines comme:

Id, Nom, Ville, JobTitle

Disons que j'ai données d'échantillon comme: P Wood, Londres, Directeur J Smith, London, chef de projet D Lock, Brighton, développeur K Pracy, Londres, développeur

Par souci d'exemple, supposons que c'est une ma système de tching qui permet aux gens de se trouver. Supposons également que Id est un identifiant unique.

Je veux écrire une requête "d'échantillonnage" qui devrait me trouver l'ensemble des enregistrements qui correspondent à d'autres enregistrements pour tous les critères.

Ainsi, par exemple, je veux définir un critère comme:

Trouvez-moi les personnes qui correspondent à des gens dans différentes villes avec des titres d'emploi differfent:

Si le schéma ci-dessus était une table SGBDR SQL (permet de dire que les gens), la requête approximative serait quelque chose comme ceci:

 
SELECT P.Id, 
    (
     SELECT COUNT(1) 
     FROM People PI Where PI.Id != P.Id 
     AND PI.City != P.City 
     AND PI.JobTitle != P.JobTitle 
    ) AS FindCount 
FROM 
People P 

Eh bien, la requête peut ne pas être réalisable, mais vous voyez l'idée. Quoi qu'il en soit, il existe d'autres exigences que Findcount devrait être supérieur à x et inférieur à y. Est-ce que quelqu'un peut me faire savoir si cela est possible dans SOLR ou si c'est quelque chose qui n'est pas destiné à SOLR. Je sais que SOLR 4 arrive avec un opérateur de jointure mais cela me semble plus comme une clause IN qui limite l'utilisation. Par exemple, considérez que je veux que l'ID correspondant soit également dans la requête ci-dessus plutôt que compte.

Toute aide appréciée.

Merci, Immi

Répondre

1

Je ne pense pas que cela soit faisable dans une requête et vous pourriez finir avec course « select intérieur » comme requête distincte pour chaque personne