2010-11-17 15 views
6

J'essaie de mapper quelques entités d'une base de données existante à SOLR.Mappage d'entités un-à-plusieurs dans SOLR

Les tables sont:

Hôtel: hotel_id hotel_name

HotelToCategory: hotel_id category_id taux

Catégorie: category_id nom valeur

Comment puis-je utiliser ré ataImportHandler pour produire des documents comme celui-ci:

{ 
    hotel_name: 'name', 
    hotel_id: 1, 
    categories: [ 
     { category_name: 'cname', 
     value: 'val', 
     rate: 3, 
     } 
    ] 
} 

Toute aide sera grandement appréciée!

Répondre

6

Les relations sont indexées à l'aide d'entités empilées dans DIH. Jetez un oeil dans le DIH page dans le wiki Solr.

Il y a aussi quelques exemples basiques de ceci inclus dans les distributions Solr, regardez dans examples/example-DIH. Cependant, il y a une limite ici, solr ne supporte pas (actuellement) les relations entre les documents d'index, donc vous devrez trouver une solution pour l'indexer. Par exemple par tout le stockage des données d'affichage dans un champ non indexé (ce qui pourrait nécessiter très fréquente réindexation):

<document> 
    <entity name="hotel" query="select * from hotel"> 
     <field column="id" name="hotel_id" /> 
     <field column="hotel_name" name="hotel_name" /> 
     <entity name="hotel_category_display" 
       query="SELECT STATEMENT THAT RETURNS JSON REPRESENTATION"> 
      <field column="category" name="category" /> 
     </entity> 
</document> 

Ou en stockant simplement la catégorie d'identité et faire des recherches (soit contre la base de données ou catégories d'index séparément et recherche contre Solr) au moment de la recherche:

<entity name="hotel_category_display" 
     query="SELECT STATEMENT THAT RETURNS JSON REPRESENTATION"> 
    <field column="category" name="category" /> 
</entity> 
+0

Comment cela gère-t-il plusieurs hotel_catagory_disply par hôtel? Y at-il quelque chose qui doit être ajouté au schéma? – soandos