public void startSearch(SearchQuery searchQuery) { // fprintf(stderr, "startSearch: setup\n"); int i, j; // set up ConceptData lists // order search terms quicksort(0, _free2 - 1); // remove duplicates for (i = 0; i < _free2 - 1; i = j) for (j = i + 1; j < _free2; j++) if (_conceptData[i].crqEquals(_conceptData[j])) _conceptData[j] = null; else i = j; // create lists for (i = 0; i < _free2 - 1; i = j) for (j = i + 1; j < _free2; j++) if (_conceptData[j] != null) if (_conceptData[i].cEquals(_conceptData[j])) { _conceptData[i].addLast(_conceptData[j]); _conceptData[j] = null; } else i = j; // densify for (i = 0; i < _free2 - 1; i++) if (_conceptData[i] == null) for (j = i + 1; j < _free2; j++) if (_conceptData[j] != null) { _conceptData[i] = _conceptData[j]; _conceptData[j] = null; break; } // set up new document generators _nextDocGenHeap.reset(); for (i = 0; i < _free2 && _conceptData[i] != null; i++) { NextDocGenerator gen = new NextDocGenerator(_conceptData[i], _env); try { gen.first(); if (gen.getDocument() != NonnegativeIntegerGenerator.END) { _conceptData[i].setConceptLength(_env.getConceptLength(_conceptData[i].getConcept())); _nextDocGenHeap.addGenerator(gen); } } catch (Exception e) { e.printStackTrace(); } } _nextDocGenHeap.start(); searchDocument(); if (searchQuery == null) { printResults(_maxHitsToShow); } else { _query[0].makeEvent(_maxHitsToShow, searchQuery); } }