J'essaie d'indexer une table dans une base de données en utilisant Lucene. J'utilise Lucene juste pour l'indexation, les champs ne sont pas stockés. La table mentionnée ci-dessus comporte cinq colonnes (ID utilisateur (PK), description, numéro de rapport, type de rapport, rapport).Lucene Indexation et recherche
J'ai l'intention d'utiliser une combinaison de userid, reportnumber et de type de rapport pour récupérer des données de la base de données, si Lucene trouve un hit.
Un enregistrement dans la table peut s'étendre sur plusieurs lignes, par ex.
JQ123, SOMEDESCRIPTION, 1, FIN, le contenu du rapport fin
JQ123, AnotherDescription, 2, MATH, le contenu du rapport de mathématiques
JQ123, YetAnotherDesc, 3, MATH, contenu d'un autre rapport de mathématiques
JD456, MoreDesc , 1, STAT, contenu du rapport statistique ..sur
Certains types de rapports, par exemple (MATH) ont des contenus hautement structurés (XML, stockés sous forme de chaîne dans la dernière colonne) et dans le futur, je pourrais vouloir étoffer une partie du contenu en tant que champ du document.
Ma stratégie jusqu'ici a été de créer un document Lucene pour chaque ligne et l'indexer. Ma pensée derrière cela étant cela 1. Il est facile et semble logique (pour moi) 2. si je finis par extraire le contenu de certains types de documents et les rendre dans les champs, tout ce qui serait nécessaire est un Si l'instruction vérifie le rapport, saisissez et créez ces nouveaux champs. Voici le code correspondant:
public void createDocument(){
Document luceneDocument=new Document();
luceneDocument.add(new Field("userid", userID, Field.Store.NO, Field.Index.NOT_ANALYZED));
luceneDocument.add(new Field("reportnumber", reportNum, Field.Store.NO, Field.Index.NOT_ANALYZED));
luceneDocument.add(new Field("reporttype", reportType, Field.Store.NO, Field.Index.NOT_ANALYZED));
luceneDocument.add(new Field("description", description, Field.Store.NO, Field.Index.ANALYZED));
luceneDocument.add(new Field("report", report, Field.Store.NO, Field.Index.ANALYZED));
if(reporttype.equalsIgnoreCase("MATH"){
luceneDocument.add(new Field("more fields", field content, Field.Store.NO, Field.Index.ANALYZED));
}
indexwriter.add(luceneDocument)
indexwriter.close
}
1. le fait d'avoir différents documents pour le même enregistrement incidence sur l'efficacité de la recherche de Lucene de quelque façon?
2. Est-ce que cette approche a un espace disque important sur la tête par rapport à avoir un document par enregistrement dans Lucene (je ne stocker tout Les champs)?
Merci d'avance pour votre réponse,