bobo - browse 는 Lucene 에 그룹 통 계 를 추가 합 니 다.
60697 단어 Lucene
bobo - browse 는 Lucene 에 그룹 통 계 를 추가 합 니 다.
Bobo - browse 는 lucene 의 검색 결 과 를 기반 으로 한 그룹 별 집계 오픈 소스 플러그 인 으로, 타 오 바 오 에서 '셔츠' 를 검색 하고 검색 결과 상단 에 '긴팔 셔츠 (10321) 반팔 셔츠 (32561)' 등 검색 결 과 를 집계 할 수 있다.루 셀 은 3.2.0 에서 도 그룹 핑 구성 요 소 를 제공 하여 그룹 통계 기능 을 제공 하고 토론 을 하 였 으 나 여 기 는 토론 을 하지 않 습 니 다.
Bobo - browse 프로젝트 에 따 르 면 Linkedin. com 은 이 구성 요 소 를 사용 했다.
Bobo - browse 는 검색 에 만 관심 을 가지 고 색인 생 성 은 상관 없습니다. 색인 생 성 은 표준 Lucene 색인 생 성 방법 으로 계속 만 듭 니 다. Bobo - browse 프로젝트 주 소 는? http://sna-projects.com/bobo/ 다음은 테스트 코드 에 사용 되 는 구성 요소 및 버 전 입 니 다. Bobo - browse: 2.5.0 - rc1Lucene: 3.4.0log4j: 1.2.16Fastutil: 6.4
테스트 코드:
import java.util.*;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.index.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.*;
import com.browseengine.bobo.api.BoboBrowser;
import com.browseengine.bobo.api.BoboIndexReader;
import com.browseengine.bobo.api.Browsable;
import com.browseengine.bobo.api.BrowseFacet;
import com.browseengine.bobo.api.BrowseHit;
import com.browseengine.bobo.api.BrowseRequest;
import com.browseengine.bobo.api.BrowseResult;
import com.browseengine.bobo.api.FacetAccessible;
import com.browseengine.bobo.api.FacetSpec;
import com.browseengine.bobo.api.FacetSpec.FacetSortSpec;
import com.browseengine.bobo.facets.FacetHandler;
import com.browseengine.bobo.facets.impl.*;
import com.browseengine.bobo.facets.impl.SimpleFacetHandler;
import com.browseengine.bobo.facets.data.PredefinedTermListFactory;
public class TestBoboBrowse {
private Directory indexDir = null;
private Version luceneVersion = Version.LUCENE_34;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestBoboBrowse app = new TestBoboBrowse();
app.test1();
}
public void test1(){
try{
indexDir = new RAMDirectory();
createIndex();
searchTest();
indexDir.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
public void createIndex(){
String[][] data = new String[][]{
new String[] {"lenovo", "Intel", "PC Core2 E8200 2GB DDR2 250GB 7200RPM 22LCD", "08998"},
new String[] {"lenovo", "Intel", "PC Core2 E8300 2GB DDR2 320GB 7200RPM 22LCD", "09998"},
new String[] {"lenovo", "Intel", "PC Core2 Q6600 2GB DDR2 320GB 7200RPM 22LCD", "11998"},
new String[] {"lenovo", "Intel", "PC Core2 QX9770 4GB DDR2 320GB 7200RPM RAID-1 22LCD", "19998"},
new String[] {"lenovo", "Intel", "PC pentium E2200 1GB DDR2 160GB 5400RPM 19LCD", "05998"},
new String[] {"hp", "Intel", "PC pentium E2180 1GB DDR2 160GB 7200RPM 20LCD", "06398"},
new String[] {"hp", "Intel", "PC Core2 E8200 2GB DDR2 250GB 5400RPM 22LCD", "08998"},
new String[] {"hp", "Intel", "PC Core2 E6550 2GB DDR2 250GB 7200RPM 20LCD", "07398"},
new String[] {"hp", "Intel", "PC Core2 QX6850 4GB DDR2 320GB 5400RPM 22LCD", "13998"},
new String[] {"asus", "AMD", "PC Core2 QX9650 4GB DDR2 450GB 7200RPM 22LCD", "17998"},
new String[] {"dell", "AMD", "PC Core2 athlon FX76 4GB DDR2 450GB 7200RPM 22LCD", "12998"}
};
try{
Analyzer analyzer = new StandardAnalyzer(luceneVersion);
// Lucene Version >= 3.2.0 (Version.LUCENE_32)
IndexWriterConfig indexConfig = new IndexWriterConfig(luceneVersion, analyzer);
indexConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
IndexWriter indexWriter = new IndexWriter(indexDir, indexConfig);
// Lucene Version < 3.2.0 (Version.LUCENE_32)
// IndexWriter indexWriter = new IndexWriter(indexDir, analyzer, true, MaxFieldLength.LIMITED);
for(int i = 0; i < data.length; i++){
Document doc = new Document();
doc.add(new Field("vendor",data[i][0], Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("cpu",data[i][1], Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("desc",data[i][2], Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("price",data[i][3], Field.Store.YES, Field.Index.NOT_ANALYZED));
indexWriter.addDocument(doc);
}
indexWriter.optimize();
indexWriter.commit();
indexWriter.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
private void searchTest(){
try{
String fieldName = "desc";
String keywords = "Core2";
QueryParser queryParser = new QueryParser(luceneVersion, fieldName, new StandardAnalyzer(luceneVersion));
Query query = queryParser.parse(keywords);
IndexReader indexReader = IndexReader.open(indexDir,true);
List<FacetHandler<?>> facetHandlers = new ArrayList<FacetHandler<?>>();
facetHandlers.add(new SimpleFacetHandler("vendor"));
facetHandlers.add(new SimpleFacetHandler("cpu"));
//facetHandlers.add(new RangeFacetHandler("price", Arrays.asList(new String[]{"[* TO 09998]", "[09999 TO 11998]", "[11999 TO *]"})));
String[] ranges = new String[]{"[00000 TO 09999]", "[10000 TO 11998]", "[11999 TO 30000]"};
facetHandlers.add(new RangeFacetHandler("price", new PredefinedTermListFactory(Integer.class, "0"), Arrays.asList(ranges)));
BoboIndexReader boboIndexReader = BoboIndexReader.getInstance(indexReader,facetHandlers);
BrowseRequest browseRequest = new BrowseRequest();
browseRequest.setCount(10);
browseRequest.setOffset(0);
browseRequest.setQuery(query);
//SortField[] sortFields = new SortField[2]; //
//sortFields[0] = new SortField("vendor", SortField.STRING, true);
//sortFields[1] = new SortField("price", SortField.INT, true);
//browseRequest.setSort(sortFields);
FacetSpec facetSpec = new FacetSpec();
facetSpec.setMaxCount(10);//
facetSpec.setOrderBy(FacetSortSpec.OrderHitsDesc);
browseRequest.setFacetSpec("vendor", facetSpec);
browseRequest.setFacetSpec("cpu", facetSpec);
browseRequest.setFacetSpec("price", facetSpec);
Browsable browser = new BoboBrowser(boboIndexReader);
BrowseResult browseResult = browser.browse(browseRequest);
int totalHits = browseResult.getNumHits();
BrowseHit[] browseHit = browseResult.getHits();
System.out.println("=====Total records: "+totalHits);
//
Map<String,FacetAccessible> facetMap = browseResult.getFacetMap();
if(facetMap.size() > 0){
System.out.println("-------Vendor-----------------------");
FacetAccessible vendorFacets = facetMap.get("vendor");
List<BrowseFacet> facetVals = vendorFacets.getFacets();
for(BrowseFacet f:facetVals){
System.out.println(f.getValue() + "(" + f.getHitCount() + ")");
}
System.out.println("-------CPU----------------");
FacetAccessible cpuFacets = facetMap.get("cpu");
facetVals = cpuFacets.getFacets();
for(BrowseFacet f:facetVals){
System.out.println(f.getValue() + "(" + f.getHitCount() + ")");
}
System.out.println("-------Price----------------");
FacetAccessible priceFacets = facetMap.get("price");
facetVals = priceFacets.getFacets();
for(BrowseFacet f:facetVals){
System.out.println(f.getValue() + "(" + f.getHitCount() + ")");
}
}
boboIndexReader.close();
indexReader.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
출력 결과:
Total records: 9
-------Vendor-----------------------
lenovo(4)
hp(3)
asus(1)
dell(1)
-------CPU----------------
Intel(7)
AMD(2)
-------Price----------------
[00000 TO 09999](4)
[11999 TO 30000](4)
[10000 TO 11998](1)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Elasticsearch 호출 Lucene 쿼리 인터페이스 원본 분석 6: 접두사 쿼리(Prefix)소개 조회 문법 원본 분석 접두사 조회는 설정에 있어서 단어 조회와 유사하다.접두사 검색은 이러한 문서와 일치할 수 있습니다. 이 문서의 특정 필드는 주어진 접두사로 시작됩니다. 예: 모든 제목 필드가cri로 시작하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.