2013-05-15 4 views
0

J'ai un index de documents qui est réparti sur plusieurs fragments et répliques. La taille est ca. 40 mil et je m'attends à ce qu'il se développeDonnées volatiles dans Solr

Problème: Les utilisateurs ajoutent des informations à ces documents, qu'ils modifient assez fréquemment. Ils ont besoin d'être intégrés dans la syntaxe de recherche, par ex. funny and cool and cat:interesting. Où chat serait un ensemble de données volatile

Autant que je sache, ni Solr ni Lucene ne supportent la "vraie mise à jour", cela signifie que je dois réindexer l'ensemble des documents modifiés. J'ai donc besoin de le connecter à une source de données externe telle qu'une base de données relationnelle. Je l'ai fait dans Lucene avec recherche extensible (http://lucene.apache.org/core/4_3_0/queryparser/index.html). L'algorithme était assez facile:

  1. requête Preprosess en ajoutant « _ » à tous les champs externes
  2. mapper ces champs aux cours
  3. Chaque classe étend la classe org.apache.lucene.search.Filter et convertit ids à un bitset par public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException publique remplaçant:

    ResultSet set = state.executeQuery();   
        OpenBitSet bitset = new OpenBitSet(); 
        while (set.next()) { 
         bitset.set(set.getInt("ID")); 
        } 
    
  4. Puis en étendant org.apache.lucene.queryparser.ext.ParserExtension, je priorité sur parser comme ceci:

    public Query parse(ExtensionQuery eq) throws ParseException{ String cat= eq.getRawQueryString(); Filter filter = _cache.getFilter(cat); return new ConstantScoreQuery(filter); }

  5. Extension org.apache.lucene.queryparser.ext.Extensions en utilisant la méthode ajouter et fait.

Mais COMMENT de le faire dans Solr?

J'ai trouvé quelques suggestions:

  1. Utiliser champ externe (http://lucene.apache.org/solr/4_3_0/solr-core/org/apache/solr/schema/ExternalFileField.html)
  2. des ORA (http://wiki.apache.org/solr/NearRealtimeSearch) qui ressemble un peu en construction pour moi.

Des idées comment faire dans Solr? Peut-être qu'il y a des exemples de code?

S'il vous plaît, considérons également que je suis un peu nouveau à Solr.

Merci

Répondre

1

Les versions 4.x Solr tout support Atomic Update que je crois peut répondre à vos besoins.

+0

merci, mais qu'en est-il de la performance? Est-il préférable de retirer et d'ajouter le document? et dois-je passer tous les champs à la demande? Sry si les questions n'ont aucun sens – Windys

+0

Vous ne passerez que le (s) champ (s) à mettre à jour et le modificateur de mise à jour (ajouter, définir, supprimer) à appliquer. Veuillez vous référer à la documentation pour cela ainsi qu'aux limitations et mises en garde de cette fonctionnalité. En ce qui concerne les performances, vous aurez besoin de tester cela pour votre scénario spécifique car il y a trop de variables avec chaque implémentation de Solr pour être capable de faire de larges déclarations de performance. –

+0

Une question de plus, et si je n'ai pas tous les champs stockés? Par exemple, je stocke le texte du document séparément dans la base de données en raison de problèmes de performances. – Windys