|
52 | 52 | * |
53 | 53 | * <ol> |
54 | 54 | * <li>Given a list of fields and weights, it pretends there is a synthetic combined field where |
55 | | - * all terms have been indexed. It computes new term and collection statistics for this |
56 | | - * combined field. |
| 55 | + * all terms have been indexed. It computes new term and field statistics for this combined |
| 56 | + * field. |
57 | 57 | * <li>It uses a disjunction iterator and {@link IndexSearcher#getSimilarity} to score documents. |
58 | 58 | * </ol> |
59 | 59 | * |
@@ -279,41 +279,37 @@ class CombinedFieldWeight extends Weight { |
279 | 279 | TermStates ts = TermStates.build(searcher, fieldTerms[i], true); |
280 | 280 | termStates[i] = ts; |
281 | 281 | if (ts.docFreq() > 0) { |
282 | | - TermStatistics termStats = |
283 | | - searcher.termStatistics(fieldTerms[i], ts.docFreq(), ts.totalTermFreq()); |
| 282 | + TermStats termStats = searcher.termStats(fieldTerms[i], ts.docFreq(), ts.totalTermFreq()); |
284 | 283 | docFreq = Math.max(termStats.docFreq(), docFreq); |
285 | 284 | totalTermFreq += (double) field.weight * termStats.totalTermFreq(); |
286 | 285 | } |
287 | 286 | } |
288 | 287 | if (docFreq > 0) { |
289 | | - CollectionStatistics pseudoCollectionStats = mergeCollectionStatistics(searcher); |
290 | | - TermStatistics pseudoTermStatistics = |
291 | | - new TermStatistics(new BytesRef("pseudo_term"), docFreq, Math.max(1, totalTermFreq)); |
292 | | - this.simWeight = |
293 | | - searcher.getSimilarity().scorer(boost, pseudoCollectionStats, pseudoTermStatistics); |
| 288 | + FieldStats pseudoFieldStats = mergeFieldStats(searcher); |
| 289 | + TermStats pseudoTermStats = |
| 290 | + new TermStats(new BytesRef("pseudo_term"), docFreq, Math.max(1, totalTermFreq)); |
| 291 | + this.simWeight = searcher.getSimilarity().scorer(boost, pseudoFieldStats, pseudoTermStats); |
294 | 292 | } else { |
295 | 293 | this.simWeight = null; |
296 | 294 | } |
297 | 295 | } |
298 | 296 |
|
299 | | - private CollectionStatistics mergeCollectionStatistics(IndexSearcher searcher) |
300 | | - throws IOException { |
| 297 | + private FieldStats mergeFieldStats(IndexSearcher searcher) throws IOException { |
301 | 298 | long maxDoc = 0; |
302 | 299 | long docCount = 0; |
303 | 300 | long sumTotalTermFreq = 0; |
304 | 301 | long sumDocFreq = 0; |
305 | 302 | for (FieldAndWeight fieldWeight : fieldAndWeights.values()) { |
306 | | - CollectionStatistics collectionStats = searcher.collectionStatistics(fieldWeight.field); |
307 | | - if (collectionStats != null) { |
308 | | - maxDoc = Math.max(collectionStats.maxDoc(), maxDoc); |
309 | | - docCount = Math.max(collectionStats.docCount(), docCount); |
310 | | - sumDocFreq = Math.max(collectionStats.sumDocFreq(), sumDocFreq); |
311 | | - sumTotalTermFreq += (double) fieldWeight.weight * collectionStats.sumTotalTermFreq(); |
| 303 | + FieldStats fieldStats = searcher.fieldStats(fieldWeight.field); |
| 304 | + if (fieldStats != null) { |
| 305 | + maxDoc = Math.max(fieldStats.maxDoc(), maxDoc); |
| 306 | + docCount = Math.max(fieldStats.docCount(), docCount); |
| 307 | + sumDocFreq = Math.max(fieldStats.sumDocFreq(), sumDocFreq); |
| 308 | + sumTotalTermFreq += (double) fieldWeight.weight * fieldStats.sumTotalTermFreq(); |
312 | 309 | } |
313 | 310 | } |
314 | 311 |
|
315 | | - return new CollectionStatistics( |
316 | | - "pseudo_field", maxDoc, docCount, sumTotalTermFreq, sumDocFreq); |
| 312 | + return new FieldStats("pseudo_field", maxDoc, docCount, sumTotalTermFreq, sumDocFreq); |
317 | 313 | } |
318 | 314 |
|
319 | 315 | @Override |
|
0 commit comments