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

📄 boostquery.java

📁 Lucene+nuctch一书的全部源码 测试源码 和几个简单的项目
💻 JAVA
字号:
package chapter7;


import java.io.IOException;
import java.util.Date;

import org.apache.lucene.index.Term;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;

import org.apache.lucene.search.Query;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.queryParser.*;
import org.apache.lucene.search.*;


import org.apache.lucene.search.BooleanQuery;

import org.apache.lucene.store.Directory; 
import org.apache.lucene.store.RAMDirectory;

import org.apache.lucene.search.DefaultSimilarity;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.search.payloads.BoostingTermQuery;

public class BoostQuery {

	private static final String[] ContentList = { "good Lucene cd ", 
           "good cd ,good book", 
           "good book",
           "Lucene book good" };
	
	private static final String F = "f";
	private static final String Term1 = "Lucene";
	private static final String Term2 = "good";
	private static Directory directory;
	private static Analyzer analyzer;
	
	public static void main(String[] args) throws IOException{
		directory = new RAMDirectory();
		CreateIndex();
		searchIndex();
	}

private static void CreateIndex() throws IOException{
	
	analyzer = new StandardAnalyzer();
	
	IndexWriter writer = new IndexWriter( directory, analyzer );
	for( String content : ContentList ){
		Document doc = new Document();
		Field f = new Field( F, content, Field.Store.YES, Field.Index.TOKENIZED );
		f.setOmitNorms( true );
		doc.add( f );
		writer.addDocument( doc );
	}
	writer.close();
	}

private static void searchIndex() throws IOException{
	
	IndexSearcher searcher = new IndexSearcher( directory );
	searcher.setSimilarity( new PayloadSimilarity() );
	BooleanQuery query = new BooleanQuery();
	
	Query termqery1 = new TermQuery( new Term( F, Term1 ) );
	Query termqery2 = new TermQuery( new Term( F, Term2 ) );
	query.add( termqery1, BooleanClause.Occur.SHOULD );
	query.add( termqery2, BooleanClause.Occur.SHOULD );
/*
	Query btermqery1 = new BoostingTermQuery( new Term( F, Term1 ) );
	Query btermqery2 = new BoostingTermQuery( new Term( F, Term2 ) );
	query.add( btermqery1, BooleanClause.Occur.SHOULD );
	query.add( btermqery2, BooleanClause.Occur.SHOULD );
*/
	Hits hits = searcher.search( query );
	for( int i = 0; i < hits.length(); i++ ){
			Document doc = hits.doc( i );
			int id = hits.id( i );
			float score = hits.score( i );
			System.out.println( score + " : " + doc.get( F ) );
			//Explanation exp = searcher.explain( query, id );
			//System.out.println( exp.toString() );
			}
	searcher.close();
	}

static class PayloadSimilarity extends DefaultSimilarity
{
	private static final String POS_NAME = "good";
	public float scorePayload(byte[] payload, int offset, int length){
		return isName( payload, offset, length ) ? 2.0f : 1.0f;
	}
	private static boolean isName( byte[] payload, int offset, int length ){
		String paystr = new String( payload, offset, length );
		return paystr.indexOf( POS_NAME ) >= 0 ? true : false;
		}
	}
public float lengthNorm(String fieldName, int numTerms) {
    return 1;
  }

  public float queryNorm(float sumOfSquaredWeights) {
    return 1;
  }

  public float sloppyFreq(int distance) {
    return 1;
  }

  public float coord(int overlap, int maxOverlap) {
    return 1;
  }

  public float idf(int docFreq, int numDocs) {
    return 1;
  }

  public float tf(float freq) {
    return 1;
  }

}



⌨️ 快捷键说明

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