protected Weight createWeight(Searcher searcher) { if (termArrays.size() == 1) { // optimize one-term case Term[] terms = (Term[])termArrays.get(0); BooleanQuery boq = new BooleanQuery(); for (int i=0; i<terms.length; i++) { boq.add(new TermQuery(terms[i]), false, false); } boq.setBoost(getBoost()); return boq.createWeight(searcher); } return new PhrasePrefixWeight(searcher); }
@Override public Weight doCreateWeight(IndexSearcher searcher, boolean needsScores) throws IOException { if (searcher.getIndexReader().numDocs() == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); } IndexParentChildFieldData globalIfd = parentChildIndexFieldData.loadGlobal((DirectoryReader)searcher.getIndexReader()); final long maxOrd; List<LeafReaderContext> leaves = searcher.getIndexReader().leaves(); if (globalIfd == null || leaves.isEmpty()) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); } else { AtomicParentChildFieldData afd = globalIfd.load(leaves.get(0)); SortedDocValues globalValues = afd.getOrdinalsValues(parentType); maxOrd = globalValues.getValueCount(); } if (maxOrd == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); } ParentOrdsCollector collector = new ParentOrdsCollector(globalIfd, maxOrd, parentType); searcher.search(parentQuery, collector); if (collector.parentCount() == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); } return new ChildrenWeight(this, childrenFilter, collector, globalIfd); }
currentContextScorer = bq.createWeight(searcher).scorer(reader, scoreDocsInOrder, topScorer);
@Override public Weight doCreateWeight(IndexSearcher searcher, boolean needsScores) throws IOException { if (searcher.getIndexReader().numDocs() == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); List<LeafReaderContext> leaves = searcher.getIndexReader().leaves(); if (globalIfd == null || leaves.isEmpty()) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); } else { AtomicParentChildFieldData afd = globalIfd.load(leaves.get(0)); return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); return new BooleanQuery.Builder().build().createWeight(searcher, needsScores);
@Override public Weight doCreateWeight(IndexSearcher searcher, boolean needsScores) throws IOException { if (searcher.getIndexReader().numDocs() == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); if (globalIfd == null) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); searcher.search(parentQuery, collector); if (collector.parentCount() == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores);
@Override public Weight doCreateWeight(IndexSearcher searcher, boolean needsScores) throws IOException { if (searcher.getIndexReader().numDocs() == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); if (globalIfd == null) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores); numFoundParents = collector.foundParents(); if (numFoundParents == 0) { return new BooleanQuery.Builder().build().createWeight(searcher, needsScores);