Chaque document de mon index Lucene est un peu similaire à un post dans stackoverflow et j'essaie de faire une recherche dans l'index (qui contient des millions de documents). Chaque utilisateur ne devrait pouvoir effectuer une recherche que par le biais des publications de l'entreprise. Je n'ai aucun contrôle sur la façon dont les données sont indexées et je n'ai besoin que de mettre en œuvre une simple recherche (qui fonctionne).Meilleures pratiques pour implémenter une recherche Lucene en Java
Voici mon premier projet:
String q = "mysql"
String companyId = "1001"
String[] fields = { "body", "subject", "number", "category", "tags"};
Float float10 = new Float(10);
Float float5 = new Float(5);
Map<String, Float> boost = new HashMap<String, Float>();
boost.put("body", float10);
boost.put("subject", float10);
boost.put("number", float5);
boost.put("category", float5);
boost.put("tags", float5);;
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(fields, new StandardAnalyzer(), boost);
mfqp.setAllowLeadingWildcard(true);
Query userQuery = mfqp.parse(q);
TermQuery companyQuery = new TermQuery(new Term("company_id", companyId));
BooleanQuery booleanQuery = new BooleanQuery();
BooleanQuery.setMaxClauseCount(50000)
booleanQuery.add(userQuery, BooleanClause.Occur.MUST);
booleanQuery.add(companyQuery, BooleanClause.Occur.MUST);
FSDirectory directory = FSDirectory.getDirectory(new File("/tmp/index"));
IndexSearcher searcher = SearcherManager.getIndexSearcherInstance(directory);
Hits hits = searcher.search(booleanQuery);
Son travail essentiellement fonctionnel, mais je vois des problèmes de mémoire. Je reçois une erreur Out of Memory tous les 4, 5 jours et j'ai pris un tas et j'ai vu que les objets Lucene Term et TermInfo étaient en tête de liste. J'utilise l'instance singlet de IndexSearcher et je ne peux voir qu'une seule occurrence dans le tas.
Des commentaires sur ce que je fais? Ce que je fais mal et ce que je peux faire mieux en général?
La configuration est ok, mais la question est désespérément vague. Voulez-vous dire qu'il y a une fuite de mémoire? Comment le sais-tu? Quelle est votre preuve? –
Modifié. J'espère que c'est plus clair maintenant. – Langali
Avez-vous utilisé http://www.eclipse.org/mat/ pour faire l'analyse? – akuhn