2011-03-10 5 views
1

Je suis en train de construire un système où je veux montrer seulement les résultats indexés ces derniers jours. En outre, je ne veux pas maintenir un index géant avec un million de documents si je veux seulement renvoyer les résultats de quelques jours (des milliers de documents). D'autre part, mon système repose fortement sur le fait que les occurrences de termes dans les documents stockés dans l'index ont une distribution réaliste (par conséquent: IDF réaliste). Cela dit, je voudrais utiliser un petit index pour retourner les résultats, mais je veux calculer le score des documents en utilisant un IDF d'un Index beaucoup plus grand (ou même une source externe).Dans Lucene, est-ce que je peux rechercher un index mais utiliser l'IDF d'un autre index?

L'API de similarité ne semble pas me permettre de le faire. La méthode idf ne reçoit pas comme paramètre le terme utilisé.

Une autre possibilité consiste à utiliser TrieRangeQuery pour s'assurer que les documents affichés sont dans les deux derniers jours. Encore une fois, je préfère ne pas conserver un indice plus grand. Aussi ce genre de requête n'est pas bon marché.

Répondre

2

Vous devriez pouvoir étendre IndexReader et remplacer les méthodes docFreq() pour fournir les valeurs souhaitées. Une chose que cette implémentation peut faire est d'ouvrir deux instances IndexReader - une pour le petit index et une pour le grand index. Toutes les méthodes sont déléguées au petit IndexReader, à l'exception de docFreq(), qui est délégué au grand index. Vous devrez mettre à l'échelle la valeur renvoyée, c'est-à-dire

int myNewDocFreq = bigIndexReader.docFreq(t)/bigIndexReader.maxDoc() * smallIndexReader.maxDoc() 
+0

Je ne comprenais pas très bien le besoin de mise à l'échelle. Pouvez-vous clarifier? –

Questions connexes