2010-12-08 41 views
0

J'essaie de configurer des champs dans Solr pour effectuer une recherche complexe.Aide à la configuration du schéma Solr pour les données complexes

Je souhaite que les utilisateurs puissent trouver des organisations en fonction de leurs heures d'ouverture et des services offerts au cours de la journée et de la période.

Exemple: Find all organizations open Monday at 3pm offering childcare service and Spanish speakers.

Les champs sont:

- day of week open (long) 
- open time (long) 
- close time (long) 
- services offered (long) 
- languages spoken (long) 

Je sais que je peux utiliser le champ de tableau avec une requête de plage pour rechercher sur tout un champ, mais je ne suis pas sûr de savoir comment corrèle les données connexes. Si le service de garde d'enfants n'est offert que le mercredi, je ne veux pas que l'organisation apparaisse lors de la recherche du lundi.

Répondre

2

Cela dépend beaucoup du type de requêtes dont vous aurez besoin. En général, il est impossible de concevoir le schéma tout d'un seul exemple de requête, mais voici un début:

name: string/text 
services: multiValued string 
languages: multiValued string 
opentime: multiValued string 
servicestime: multiValued string 

documents Exemples:

name: Foo org 
services: childcare, something_else 
languages: English, Spanish 
opentime: Monday 9AM, Monday 10AM, ..., Monday 4PM, Tuesday 9AM, ..., Tuesday 4PM 
servicestime: childcare Monday 9AM, ..., childcare Monday 12PM 

Votre exemple de requête: « Trouver toutes les organisations ouvertes lundi à 15 heures offrant un service de garde d'enfants et des hispanophones "peut être traduit en ce schéma comme: servicestime:"Monday 3PM" AND languages:Spanish (il est sous-entendu que si elle offre un service le lundi 3pm l'organisation est ouverte).

En général, lors de la conception d'un schéma Solr, vous disposez de champs spécifiques au scénario. N'oubliez pas que ce n'est pas une base de données relationnelle, vos données doivent être dénormalisées.

+0

Lorsque vous comprenez comment Solr fonctionne, cette façon de penser a beaucoup de sens. –

+0

Je pensais à cela, mais je n'étais pas sûr si les requêtes de distance fonctionneraient. Connaissez-vous un moyen de le faire? La seule chose à laquelle je pourrais penser est si vous les avez concaténées, puis j'ai cherché {lundi 9 TO lundi 11} ou quelque chose comme ça. – Xodarap

+0

@Xodarap: 'opentime:" lundi 9AM "ET opentime:" lundi 10AM "ET opentime:" lundi 11AM "' vous pouvez facilement générer ce type de requête côté client avec une simple boucle for. –