2011-10-04 3 views
0

J'ai une table de produits sur ma base de données, et un tableau avec les caractéristiques de ce produit. La table des caractéristiques a 3 colonnes: id, type et valeur. Id est une clé étrangère des produits. Un exemple de données sur mes tables: Produits de table:Comment indexer des lignes comme des colonnes dans Solr

ID | Description |

01 Computer A

02 voitures

03 Computer B

Tableau: Caractéristiques

ID | Type | Valeur |

01 Processeur Phenom X3

01 Mémoire 2 Go

01 HDD 500Go

02 Couleur Bleu

02 Mark Ford

03 Processeur Phenom X3

03 Mémoire 3GB

Je veux la meilleure façon d'indexer, donc, un exemple, lorsque quelqu'un cherche « ordinateur », les émissions de facettage:

Phenom X3 (2)

mémoire de 2 Go (1)

3 Go de mémoire (1)

HDD 500Go (1)

Et ainsi de suite, avec la chaîne liée de requête. Si je fais une requête avec la chaîne "processeur", elle listera Phenom X3 (1) seulement si ces produits (avec "processeur" sur la description) ont une fonctionnalité comme Processeur: Phenom X3. Il y a beaucoup de types de produits, donc nous ne pouvons pas créer des colonnes statiques pour toutes les fonctionnalités et les transmettre à Solr ... J'espère que ma question sera claire, merci d'avance!

Répondre

0

Utiliser les données gestionnaire d'importation pour indexer les données @http://wiki.apache.org/solr/DataImportHandler

Vous pouvez définir la table des produits comme entité principale et les caractéristiques comme entité sous. Alors que le produit avec les fonctionnalités est indexé comme un seul document.

Pour l'indexation - Définir champ de description indexé vrai Comme vous voulez les facettes du type et de la valeur, vous pouvez définir une nouvelle type_value de champ avec chaîne de type et concat le champ type et la valeur dans dataconfig.xml type_value sera un champ à valeurs multiples.

Pour la recherche - Rendez la zone de description du produit consultable, par ex. q = description: ordinateurs
Vous pouvez configurer ceci dans le fichier solrconfig.xml avec la pondération appropriée.

Définissez le champ de caractéristiques en tant que facette et facette.field = type_value

J'espère que cela donne une bonne idée.

+0

Super, ça m'a beaucoup aidé. J'ai fait la concat avec templatetransformer, mais il semble que les données sous le champ type_value soient mal indexées. Je reçois "amd phenom X 3 intel I 5" (tous dépouillé) au lieu de quelque chose comme "Amd: Phenomx3 intel: i5". En outre, il existe un moyen de vérifier sur Solr ce qui est indexé, comme une requête sur la base de données, quand les lignes sont retournées? –

+0

Ok, après quelques recherches, je trouve les réponses: utilisé tokenizer classe solr.KeywordTokenizerFactory. Cela rend la concatation très efficace (le solr.WhitespaceTokenizerFactory sépare chaque espace). En outre, j'utilise Luke pour voir ce qui est indexé. Je pense qu'il y a une autre façon de le faire, mais je suis content de ce qu'il fait. Merci! –

Questions connexes