`

Bobo-Browse 如何修改评分机制

 
阅读更多
  Bobo使用它的服务可以参考 BoboBrowseServiceImpl.java 在bobo-service/src目录,包package com.browseengine.bobo.service.impl下。

  在Bobo新的版本下2.5.0下 比上一个版本2.0.6做了大的修改,所以里面的评分机制也做了修改。


1)继承 BoboSubBrowser ,实现其中的 search
示例代码:
public class VoBoboSubBrowser extends BoboSubBrowser {

	public VoBoboSubBrowser(BoboIndexReader reader) {
		super(reader);
		// TODO Auto-generated constructor stub
	}
	
	@Override
	  public void search(Weight weight, Filter filter, Collector collector) throws IOException
	  {
	    search(weight, filter, collector, 0);
	  }

}


2)继承SortCollector 实现其中的方法
示例代码:

public class VoSortCollectorImpl extends SortCollector {
protected VoSortCollectorImpl(SortField[] sortFields, boolean fetchStoredFields) {
		super(sortFields, fetchStoredFields);
		// TODO Auto-generated constructor stub
	}

	@Override
	public int getTotalHits() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public BrowseHit[] topDocs() throws IOException {
		// TODO Auto-generated method stub
		return null;
	}
......
}


3)继承MultiBoboBrowser 实现 getSortCollector,其中用到了VoBoboSubBrowser,VoSortCollectorImpl   
示例代码:

public class VoMultiBoboBrowser extends MultiBoboBrowser {

//根据传进来的BoboIndexReader,构造出 protected final Browsable[] _subBrowsers;
	public VoMultiBoboBrowser(Browsable[] browsers) throws IOException {
		super(browsers);

	}

	
		
	  public static Browsable[] createBrowsables(BoboIndexReader reader)
	  {
	    List<IndexReader> readerList = new ArrayList<IndexReader>();
	    ReaderUtil.gatherSubReaders(readerList, reader);
	    IndexReader[] subReaders = (IndexReader[])readerList.toArray(new IndexReader[readerList.size()]);
	    if(subReaders == null || subReaders.length == 0)
	    {
	      return new Browsable[]{ new VoBoboSubBrowser(reader) };
	    }
	    else
	    {
	      Browsable[] subBrowsables = new Browsable[subReaders.length];
	      for(int i = 0; i < subReaders.length; i++)
	      {
	        subBrowsables[i] = new VoBoboSubBrowser((BoboIndexReader)subReaders[i]);
	      }
	      return subBrowsables;
	    }
	  }
	  
	  public static Browsable[] createBrowsables(List<BoboIndexReader> readerList){
		  List<Browsable> browsableList = new ArrayList<Browsable>();
		  for (BoboIndexReader boboReader : readerList){
			  Browsable[] sub = createBrowsables(boboReader);
			  browsableList.addAll(Arrays.asList(sub));
		  }
		  return browsableList.toArray(new Browsable[browsableList.size()]);

	  }
	  
//这儿应该使用VoSortCollectorImpl
	@Override
	public SortCollector getSortCollector(SortField[] sort, Query q, int offset, int count, boolean fetchStoredFields, boolean forceScoring) {
		if (_subBrowsers.length == 1) {
			return _subBrowsers[0].getSortCollector(sort, q, offset, count, fetchStoredFields, forceScoring);
		}
			//return SortCollector.buildSortCollector(this, q, sort, offset, count, forceScoring, fetchStoredFields);
		return VoMultiBoboBrowser.buildSortCollector(this, q, sort, offset, count, forceScoring, fetchStoredFields);
	}
	
	
	public static SortCollector buildSortCollector(Browsable browser,Query q,SortField[] sort,int offset,int count,boolean forceScoring,boolean fetchStoredFields){
                   ......		
		return new VoSortCollectorImpl(compSource, sort, browser, offset, count, doScoring, fetchStoredFields);
	}}



4)在BoboBrowseServiceImpl.java中,使用VoMultiBoboBrowser









细节需要修改,暂时结束。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics