//fieldname MUST be interned prior to this call private static void GetTerms(Query query, System.Collections.Hashtable terms, bool prohibited, System.String fieldName) { try { if (query is BooleanQuery) { GetTermsFromBooleanQuery((BooleanQuery)query, terms, prohibited, fieldName); } else if (query is FilteredQuery) { GetTermsFromFilteredQuery((FilteredQuery)query, terms, prohibited, fieldName); } else { System.Collections.Hashtable nonWeightedTerms = new System.Collections.Hashtable(); query.ExtractTerms(nonWeightedTerms); System.Collections.IDictionaryEnumerator iter = nonWeightedTerms.GetEnumerator(); while (iter.MoveNext()) { Term term = (Term)iter.Value; if ((fieldName == null) || (term.Field() == fieldName)) { WeightedTerm temp = new WeightedTerm(query.GetBoost(), term.Text()); terms.Add(temp, temp); } } } } catch (System.NotSupportedException ignore) { //this is non-fatal for our purposes } }
public QueryScorer(WeightedTerm[] weightedTerms) { termsToFind = new System.Collections.Hashtable(); for (int i = 0; i < weightedTerms.Length; i++) { WeightedTerm existingTerm = (WeightedTerm) termsToFind[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[weightedTerms[i].term] = weightedTerms[i]; maxTermWeight = System.Math.Max(maxTermWeight, weightedTerms[i].GetWeight()); } } }
public QueryScorer(WeightedTerm[] weightedTerms) { termsToFind = new System.Collections.Hashtable(); for (int i = 0; i < weightedTerms.Length; i++) { WeightedTerm existingTerm = (WeightedTerm)termsToFind[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[weightedTerms[i].term] = weightedTerms[i]; maxTermWeight = System.Math.Max(maxTermWeight, weightedTerms[i].GetWeight()); } } }
/// <summary> Extracts all terms texts of a given Query into an array of WeightedTerms /// /// </summary> /// <param name="query"> Query to extract term texts from /// </param> /// <param name="prohibited"><code>true</code> to extract "prohibited" terms, too /// </param> /// <param name="fieldName"> The fieldName used to filter query terms /// </param> /// <returns> an array of the terms used in a query, plus their weights. /// </returns> public static WeightedTerm[] GetTerms(Query query, bool prohibited, System.String fieldName) { System.Collections.Hashtable terms = new System.Collections.Hashtable(); if (fieldName != null) { fieldName = String.Intern(fieldName); } GetTerms(query, terms, prohibited, fieldName); WeightedTerm[] result = new WeightedTerm[terms.Count]; int i = 0; foreach (System.Object item in terms.Values) { result[i++] = (WeightedTerm)item; } return(result); }
/* (non-Javadoc) * @see Lucene.Net.Highlight.FragmentScorer#scoreToken(org.apache.lucene.analysis.Token) */ public virtual float GetTokenScore(Token token) { System.String termText = token.TermText(); WeightedTerm queryTerm = (WeightedTerm)termsToFind[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, termText); } return(queryTerm.GetWeight()); }
/// <summary> Extracts all terms texts of a given Query into an array of WeightedTerms /// /// </summary> /// <param name="query"> Query to extract term texts from /// </param> /// <param name="prohibited"><code>true</code> to extract "prohibited" terms, too /// </param> /// <param name="fieldName"> The fieldName used to filter query terms /// </param> /// <returns> an array of the terms used in a query, plus their weights. /// </returns> public static WeightedTerm[] GetTerms(Query query, bool prohibited, System.String fieldName) { System.Collections.Hashtable terms = new System.Collections.Hashtable(); if (fieldName != null) { fieldName = String.Intern(fieldName); } GetTerms(query, terms, prohibited, fieldName); WeightedTerm[] result = new WeightedTerm[terms.Count]; int i = 0; foreach (System.Object item in terms.Values) { result[i++] = (WeightedTerm) item; } return (result); }
//fieldname MUST be interned prior to this call private static void GetTerms(Query query, System.Collections.Hashtable terms, bool prohibited, System.String fieldName) { try { if (query is BooleanQuery) GetTermsFromBooleanQuery((BooleanQuery) query, terms, prohibited, fieldName); else if (query is FilteredQuery) GetTermsFromFilteredQuery((FilteredQuery) query, terms, prohibited, fieldName); else { System.Collections.Hashtable nonWeightedTerms = new System.Collections.Hashtable(); query.ExtractTerms(nonWeightedTerms); System.Collections.IDictionaryEnumerator iter = nonWeightedTerms.GetEnumerator(); while (iter.MoveNext()) { Term term = (Term)iter.Value; if ((fieldName == null) || (term.Field() == fieldName)) { WeightedTerm temp = new WeightedTerm(query.GetBoost(), term.Text()); terms.Add(temp, temp); } } } } catch (System.NotSupportedException ignore) { //this is non-fatal for our purposes } }