⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queryscorer.java

📁 lucene2.2.0版本
💻 JAVA
字号:
package org.apache.lucene.search.highlight;/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */import java.util.HashMap;import java.util.HashSet;import org.apache.lucene.analysis.Token;import org.apache.lucene.index.IndexReader;import org.apache.lucene.search.Query;/** * {@link Scorer} implementation which scores text fragments by the number of unique query terms found. * This class uses the {@link QueryTermExtractor} class to process determine the query terms and  * their boosts to be used.  * @author mark@searcharea.co.uk *///TODO: provide option to boost score of fragments near beginning of document // based on fragment.getFragNum()public class QueryScorer implements Scorer{	TextFragment currentTextFragment=null;	HashSet uniqueTermsInFragment;	float totalScore=0;	float maxTermWeight=0;	private HashMap termsToFind;		/**	 * 	 * @param query a Lucene query (ideally rewritten using query.rewrite 	 * before being passed to this class and the searcher)	 */	public QueryScorer(Query query)	{		this(QueryTermExtractor.getTerms(query));	}		/**	 * 	 * @param query a Lucene query (ideally rewritten using query.rewrite 	 * before being passed to this class and the searcher)	 * @param fieldName the Field name which is used to match Query terms	 */	public QueryScorer(Query query, String fieldName)	{		this(QueryTermExtractor.getTerms(query, false,fieldName));	}		/**	 * 	 * @param query a Lucene query (ideally rewritten using query.rewrite 	 * before being passed to this class and the searcher)	 * @param reader used to compute IDF which can be used to a) score selected fragments better 	 * b) use graded highlights eg set font color intensity	 * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based	 */	public QueryScorer(Query query, IndexReader reader, String fieldName)	{		this(QueryTermExtractor.getIdfWeightedTerms(query, reader, fieldName)); 	}	public QueryScorer(WeightedTerm []weightedTerms	)	{		termsToFind = new HashMap();		for (int i = 0; i < weightedTerms.length; i++)		{			WeightedTerm existingTerm=(WeightedTerm) 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());			}		}	}		/* (non-Javadoc)	 * @see org.apache.lucene.search.highlight.FragmentScorer#startFragment(org.apache.lucene.search.highlight.TextFragment)	 */	public void startFragment(TextFragment newFragment)	{		uniqueTermsInFragment = new HashSet();		currentTextFragment=newFragment;		totalScore=0;			}		/* (non-Javadoc)	 * @see org.apache.lucene.search.highlight.FragmentScorer#scoreToken(org.apache.lucene.analysis.Token)	 */	public float getTokenScore(Token token)	{		String termText=token.termText();				WeightedTerm queryTerm=(WeightedTerm) 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();	}			/* (non-Javadoc)	 * @see org.apache.lucene.search.highlight.FragmentScorer#endFragment(org.apache.lucene.search.highlight.TextFragment)	 */	public float getFragmentScore()	{		return totalScore;			}	/* (non-Javadoc)	 * @see org.apache.lucene.search.highlight.FragmentScorer#allFragmentsProcessed()	 */	public void allFragmentsProcessed()	{		//this class has no special operations to perform at end of processing	}	/**	 * 	 * @return The highest weighted term (useful for passing to GradientFormatter to set	 * top end of coloring scale.  	 */    public float getMaxTermWeight()    {        return maxTermWeight;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -