public TokenizedTermScorer(WeightedTerm[] weightedTerms) { termsToFind = new HashMap<CharVector,WeightedTerm>(); for (int i = 0; i < weightedTerms.length; i++) { WeightedTerm existingTerm = termsToFind .get(weightedTerms[i].getTerm()); if ((existingTerm == null) || (existingTerm.getWeight() < weightedTerms[i].getWeight())) { // if a term is defined more than once, always use the highest scoring // weight CharVector cv = new CharVector(weightedTerms[i].getTerm()); cv.setIgnoreCase(); termsToFind.put(cv, weightedTerms[i]); maxTermWeight = Math.max(maxTermWeight, weightedTerms[i].getWeight()); } } }
@Override public float getTokenScore() { String termText = termAtt.toString(); WeightedTerm queryTerm = termsToFind.get(termText); if (queryTerm == null) { // not a query term - return return 0; } // found a query term - is it unique in this doc? if (!uniqueTermsInFragment.contains(termText)) { totalScore += queryTerm.getWeight(); uniqueTermsInFragment.add(termText); } return queryTerm.getWeight(); }
private static final void getTerms(Query query, float boost, HashSet<WeightedTerm> terms, boolean prohibited, String fieldName) { try { if (query instanceof BoostQuery) { BoostQuery boostQuery = (BoostQuery) query; getTerms(boostQuery.getQuery(), boost * boostQuery.getBoost(), terms, prohibited, fieldName); } else if (query instanceof BooleanQuery) getTermsFromBooleanQuery((BooleanQuery) query, boost, terms, prohibited, fieldName); else if (query instanceof FilteredQuery) getTermsFromFilteredQuery((FilteredQuery) query, boost, terms, prohibited, fieldName); else { HashSet<Term> nonWeightedTerms = new HashSet<>(); try { EMPTY_INDEXSEARCHER.createNormalizedWeight(query, false).extractTerms(nonWeightedTerms); } catch (IOException bogus) { throw new RuntimeException("Should not happen on an empty index", bogus); } for (Iterator<Term> iter = nonWeightedTerms.iterator(); iter.hasNext(); ) { Term term = iter.next(); if ((fieldName == null) || (term.field().equals(fieldName))) { terms.add(new WeightedTerm(boost, term.text())); } } } } catch (UnsupportedOperationException ignore) { //this is non-fatal for our purposes } }
public QueryTermScorer(WeightedTerm[] weightedTerms) { termsToFind = new HashMap<>(); for (int i = 0; i < weightedTerms.length; i++) { WeightedTerm existingTerm = termsToFind .get(weightedTerms[i].term); if ((existingTerm == null) || (existingTerm.weight < weightedTerms[i].weight)) { // if a term is defined more than once, always use the highest scoring // weight termsToFind.put(weightedTerms[i].term, weightedTerms[i]); maxTermWeight = Math.max(maxTermWeight, weightedTerms[i].getWeight()); } } }
terms.add(new WeightedTerm(score, termString)); logger.trace("++ charTermAttribute : {}", termString); CharsRef charRef = termAttribute.charsRef(); if (charRef!=null && !(charRef.offset > 0 && charRef.length() == 1)) { terms.add(new WeightedTerm(score, charRef.toString())); logger.trace("++ charRefTerm : {}", termString); String termString = obj.toString(); if(!termString.equals(prevTermString)){ terms.add(new WeightedTerm(score, termString)); logger.trace("++ charTermAttribute : {}", termString); String termString = cv.toString(); if(!termString.equals(prevTermString)){ terms.add(new WeightedTerm(score, termString)); logger.trace("++ charTermAttribute : {}", termString);
/** * Extracts search terms and their weights * @param query * @return */ private static Map<String, Float> extractTerms(Query query) { WeightedTerm[] weightedTerms = QueryTermExtractor.getTerms(query, false, Field.CONTENTS.toString()); Map<String,Float> terms = new HashMap<String,Float>(weightedTerms.length); for(WeightedTerm weightedTerm: weightedTerms) terms.put( weightedTerm.getTerm(), weightedTerm.getWeight() ); return terms; }
if (queryTerm != null) { logger.trace("matched termText {}",termText); totalScore += queryTerm.getWeight(); return queryTerm.getWeight(); if (queryTerm != null && !(charRef.offset > 0 && charRef.length == 1)) { logger.trace("matched refTermText {}",termText); totalScore += queryTerm.getWeight(); return queryTerm.getWeight();