Skip to content

Commit 3489571

Browse files
Modified console command: -i (reindex), etc. to delete all biopax el. idx. documents first...
1 parent 4f58c6e commit 3489571

File tree

8 files changed

+43
-45
lines changed

8 files changed

+43
-45
lines changed

src/main/java/cpath/service/ConsoleApplication.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,22 @@ private void modifyModel(String analysisClass) throws IOException {
194194
LOG.info("Over-writing model: {}...", service.settings().mainModelFile());
195195
new SimpleIOHandler(BioPAXLevel.L3).convertToOWL(model,
196196
new GZIPOutputStream(new FileOutputStream(service.settings().mainModelFile())));
197-
//init the lucene index as read-write
198-
service.initIndex(model, service.settings().indexDir(), false);
199-
//re-index the model
200-
service.index().save(model);
197+
//re-index
198+
reindex(model);
201199
}
202200

203-
private void reindex() throws IOException {
201+
private void reindex() {
204202
Model model = CPathUtils.importFromTheArchive(service.settings().mainModelFile());
203+
reindex(model);
204+
}
205+
206+
private void reindex(Model model) {
205207
service.initIndex(model, service.settings().indexDir(), false);
208+
//remove biopax but not id-mapping docs
209+
service.index().drop();
210+
//re-index
206211
service.index().save(model);
212+
service.index().close();
207213
}
208214

209215
/*

src/main/java/cpath/service/IndexImpl.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,10 @@ private SearchResponse transform(Query query, IndexSearcher searcher, TopDocs to
179179
throw new IllegalArgumentException("topDocs is null");
180180
}
181181
SearchResponse response = new SearchResponse();
182-
response.setMaxHitsPerPage(maxHitsPerPage);
183-
long numTotalHits = topDocs.totalHits.value; //todo: call searcher.count(q) instead or it's same?..
182+
response.setMaxHitsPerPage(getMaxHitsPerPage());
183+
long numTotalHits = topDocs.totalHits.value; //todo: call searcher.count(q) instead or it's the same?
184184
response.setNumHits(numTotalHits);
185-
List<SearchHit> hits = response.getSearchHit();//empty list
185+
List<SearchHit> hits = response.getSearchHit();//empty list to be filled from top docs
186186
assert hits!=null && hits.isEmpty();
187187
LOG.debug("transform, no. TopDocs to process:" + topDocs.scoreDocs.length);
188188
for(ScoreDoc scoreDoc : topDocs.scoreDocs) {
@@ -459,6 +459,7 @@ public void save(BioPAXElement bpe) {
459459

460460
@Override
461461
public void save(Model model) {
462+
setModel(model);
462463
final int numObjectsToIndex = model.getObjects(Entity.class).size()
463464
+ model.getObjects(EntityReference.class).size()
464465
+ model.getObjects(Provenance.class).size();
@@ -477,15 +478,13 @@ public void save(Model model) {
477478
commit();
478479
//force refreshing the index state (for new readers)
479480
refresh();
480-
setModel(model);
481481
LOG.info("build(), all done.");
482482
}
483483

484484
@Override
485485
public void commit() {
486486
try {
487487
indexWriter.commit();
488-
indexWriter.flush();
489488
} catch (Exception e) {
490489
throw new RuntimeException(e);
491490
}
@@ -495,7 +494,7 @@ public void commit() {
495494
public void close() {
496495
try {
497496
if (indexWriter != null && indexWriter.isOpen()) {
498-
indexWriter.flush();
497+
indexWriter.commit();
499498
indexWriter.close();
500499
}
501500
} catch (Exception e) {
@@ -513,21 +512,25 @@ public synchronized void refresh() {
513512
}
514513

515514
@Override
516-
public boolean isClosed() {
517-
return indexWriter == null || !indexWriter.isOpen();
518-
}
519-
520-
@Override
521-
public long count(String queryString) {
522-
return 0;
515+
public void drop() {
516+
if(indexWriter==null) {
517+
throw new IllegalStateException("read-only index");
518+
}
519+
try {
520+
Query q = new FieldExistsQuery(FIELD_KEYWORD);
521+
indexWriter.deleteDocuments(q);
522+
indexWriter.commit();
523+
indexWriter.deleteUnusedFiles();
524+
setModel(null);
525+
LOG.info("dropped (deleted) BioPAX index");
526+
} catch (IOException e) {
527+
throw new RuntimeException(e);
528+
}
523529
}
524530

525531
private void addDatasources(Set<Provenance> set, Document doc) {
526532
for (Provenance p : set) {
527-
//store but do not index/tokenize the URI
528-
// doc.add(new StoredField(FIELD_DATASOURCE, p.getUri()));
529533
doc.add(new TextField(FIELD_DATASOURCE, p.getUri(), Field.Store.YES));
530-
531534
//index names (including the datasource identifier from metadata json config; see premerge/merge)
532535
//different data sources can have the same name e.g. 'intact'; tokenized - to search by partial name
533536
for (String s : p.getName()) {
@@ -538,7 +541,6 @@ private void addDatasources(Set<Provenance> set, Document doc) {
538541

539542
private void addOrganisms(Set<BioSource> set, Document doc) {
540543
for(BioSource bs : set) {
541-
//doc.add(new StoredField(FIELD_ORGANISM, bs.getUri()));
542544
doc.add(new TextField(FIELD_ORGANISM, bs.getUri(), Field.Store.YES));
543545

544546
// add organism names
@@ -815,6 +817,6 @@ public void save(Mapping mapping) {
815817
} catch (IOException e) {
816818
throw new RuntimeException(e);
817819
}
818-
//call commit(), refresh() after one or several save(mapping)
820+
//call commit(), refresh() after several save(mapping)
819821
}
820822
}

src/main/java/cpath/service/Merger.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ public void merge() {
8181
simpleMerger.merge(m, providerModel);
8282
}
8383

84-
//remove dangling SPEs (such non-participant/components molecules are not useful for pathway analyses...)
84+
//remove dangling SPEs and Genes (such non-participant/components are not useful for pathway analyses...)
8585
ModelUtils.removeObjectsIfDangling(m, SimplePhysicalEntity.class);
86+
ModelUtils.removeObjectsIfDangling(m, Gene.class);
8687
//now, remove dangling xrefs, CV et al. utility type individuals
8788
ModelUtils.removeObjectsIfDangling(m, UtilityClass.class);
8889

src/main/java/cpath/service/ServiceImpl.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,6 @@ public void setBlacklist(Blacklist blacklist) {
139139
this.blacklist = blacklist;
140140
}
141141

142-
IndexImpl getIndex() {
143-
return index;
144-
}
145-
146-
void setIndex(IndexImpl index) {
147-
this.index = index;
148-
}
149-
150142
public ServiceResponse search(String queryStr,
151143
int page, Class<? extends BioPAXElement> biopaxClass,
152144
String[] dsources, String[] organisms) {

src/main/java/cpath/service/metadata/Index.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public interface Index {
3737
/**
3838
* Full-text search for an object.
3939
*
40-
* @param query String (keywords or Lucene query string)
40+
* @param query String (keywords or Lucene query string)
4141
* @param page hits page number (when the number of hits exceeds a threshold)
4242
* @param type - filter by class
4343
* @param datasources - filter by datasource
@@ -56,5 +56,5 @@ public interface Index {
5656

5757
void refresh();
5858

59-
boolean isClosed();
59+
void drop();
6060
}

src/main/java/cpath/service/metadata/Mappings.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,4 @@ public interface Mappings {
2727

2828
void close();
2929

30-
boolean isClosed();
31-
32-
/**
33-
* Total number of search hits for the given lucene query.
34-
* @param queryString
35-
* @return
36-
*/
37-
long count(String queryString);
3830
}

src/test/java/cpath/service/ConsoleApplicationIT.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,7 @@ public void premergeAndMerge() throws IOException {
272272
merger.replaceConflictingUris(providerModel, mainModel);
273273
mainModel.merge(providerModel);
274274

275-
// //in prod, we bremove dangling SPEs, but here/below we need them for merge assertions; so commented out...
276-
// ModelUtils.removeObjectsIfDangling(mainModel, SimplePhysicalEntity.class);
275+
//in prod, we also remove dangling SPEs and Genes but here below we need them for merge assertions...
277276
ModelUtils.removeObjectsIfDangling(mainModel, UtilityClass.class);
278277

279278
//it's vital to save to and then read the main model back from file,

src/test/java/cpath/service/IndexIT.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public final void search() throws IOException {
3131
.getResource("classpath:merge/pathwaydata1.owl").getInputStream());
3232
IndexImpl index = new IndexImpl(model, "target/test-idx", false);
3333
index.save(model);
34-
index.refresh();
3534

3635
//close index writer and re-open the index searcher in the read-only mode
3736
//(optional; tests should pass regardless; if you remove the following two lines, keep index.close() at the end)
@@ -209,6 +208,13 @@ public final void search() throws IOException {
209208
assertFalse(response.getSearchHit().isEmpty());
210209
assertEquals(1, response.getSearchHit().size());
211210

211+
//re-open to write
212+
index.close();
213+
index = new IndexImpl(model, "target/test-idx", false);
214+
index.drop();
215+
response = index.search("*", 1, null, null, null);
216+
assertTrue(response.getSearchHit().isEmpty());
217+
212218
index.close();
213219
}
214220

0 commit comments

Comments
 (0)