分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

lucene源码分析(3)facet实例

发布时间:2023-09-06 02:22责任编辑:熊小新关键词:暂无标签

简单的facet实例

public class SimpleFacetsExample { ?private final Directory indexDir = new RAMDirectory(); ?private final Directory taxoDir = new RAMDirectory(); ?private final FacetsConfig config = new FacetsConfig(); ?/** Empty constructor */ ?public SimpleFacetsExample() { ???config.setHierarchical("Publish Date", true); ?} ???/** Build the example index. */ ?private void index() throws IOException { ???IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig( ???????new WhitespaceAnalyzer()).setOpenMode(OpenMode.CREATE)); ???// Writes facet ords to a separate directory from the main index ???DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir); ???Document doc = new Document(); ???doc.add(new FacetField("Author", "Bob")); ???doc.add(new FacetField("Publish Date", "2010", "10", "15")); ???indexWriter.addDocument(config.build(taxoWriter, doc)); ???doc = new Document(); ???doc.add(new FacetField("Author", "Lisa")); ???doc.add(new FacetField("Publish Date", "2010", "10", "20")); ???indexWriter.addDocument(config.build(taxoWriter, doc)); ???doc = new Document(); ???doc.add(new FacetField("Author", "Lisa")); ???doc.add(new FacetField("Publish Date", "2012", "1", "1")); ???indexWriter.addDocument(config.build(taxoWriter, doc)); ???doc = new Document(); ???doc.add(new FacetField("Author", "Susan")); ???doc.add(new FacetField("Publish Date", "2012", "1", "7")); ???indexWriter.addDocument(config.build(taxoWriter, doc)); ???doc = new Document(); ???doc.add(new FacetField("Author", "Frank")); ???doc.add(new FacetField("Publish Date", "1999", "5", "5")); ???indexWriter.addDocument(config.build(taxoWriter, doc)); ???????indexWriter.close(); ???taxoWriter.close(); ?} ?/** User runs a query and counts facets. */ ?private List<FacetResult> facetsWithSearch() throws IOException { ???DirectoryReader indexReader = DirectoryReader.open(indexDir); ???IndexSearcher searcher = new IndexSearcher(indexReader); ???TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); ???FacetsCollector fc = new FacetsCollector(); ???// MatchAllDocsQuery is for "browsing" (counts facets ???// for all non-deleted docs in the index); normally ???// you‘d use a "normal" query: ???FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); ???// Retrieve results ???List<FacetResult> results = new ArrayList<>(); ???// Count both "Publish Date" and "Author" dimensions ???Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); ???results.add(facets.getTopChildren(10, "Author")); ???results.add(facets.getTopChildren(10, "Publish Date")); ???????indexReader.close(); ???taxoReader.close(); ???????return results; ?} ???/** User runs a query and counts facets only without collecting the matching documents.*/ ?private List<FacetResult> facetsOnly() throws IOException { ???DirectoryReader indexReader = DirectoryReader.open(indexDir); ???IndexSearcher searcher = new IndexSearcher(indexReader); ???TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); ???FacetsCollector fc = new FacetsCollector(); ???// MatchAllDocsQuery is for "browsing" (counts facets ???// for all non-deleted docs in the index); normally ???// you‘d use a "normal" query: ???searcher.search(new MatchAllDocsQuery(), fc); ???// Retrieve results ???List<FacetResult> results = new ArrayList<>(); ???// Count both "Publish Date" and "Author" dimensions ???Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); ??????results.add(facets.getTopChildren(10, "Author")); ???results.add(facets.getTopChildren(10, "Publish Date")); ???????indexReader.close(); ???taxoReader.close(); ???????return results; ?} ???/** User drills down on ‘Publish Date/2010‘, and we ??* ?return facets for ‘Author‘ */ ?private FacetResult drillDown() throws IOException { ???DirectoryReader indexReader = DirectoryReader.open(indexDir); ???IndexSearcher searcher = new IndexSearcher(indexReader); ???TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); ???// Passing no baseQuery means we drill down on all ???// documents ("browse only"): ???DrillDownQuery q = new DrillDownQuery(config); ???// Now user drills down on Publish Date/2010: ???q.add("Publish Date", "2010"); ???FacetsCollector fc = new FacetsCollector(); ???FacetsCollector.search(searcher, q, 10, fc); ???// Retrieve results ???Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); ???FacetResult result = facets.getTopChildren(10, "Author"); ???indexReader.close(); ???taxoReader.close(); ???????return result; ?} ?/** User drills down on ‘Publish Date/2010‘, and we ??* ?return facets for both ‘Publish Date‘ and ‘Author‘, ??* ?using DrillSideways. */ ?private List<FacetResult> drillSideways() throws IOException { ???DirectoryReader indexReader = DirectoryReader.open(indexDir); ???IndexSearcher searcher = new IndexSearcher(indexReader); ???TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); ???// Passing no baseQuery means we drill down on all ???// documents ("browse only"): ???DrillDownQuery q = new DrillDownQuery(config); ???// Now user drills down on Publish Date/2010: ???q.add("Publish Date", "2010"); ???DrillSideways ds = new DrillSideways(searcher, config, taxoReader); ???DrillSidewaysResult result = ds.search(q, 10); ???// Retrieve results ???List<FacetResult> facets = result.facets.getAllDims(10); ???indexReader.close(); ???taxoReader.close(); ???????return facets; ?} ?/** Runs the search example. */ ?public List<FacetResult> runFacetOnly() throws IOException { ???index(); ???return facetsOnly(); ?} ???/** Runs the search example. */ ?public List<FacetResult> runSearch() throws IOException { ???index(); ???return facetsWithSearch(); ?} ???/** Runs the drill-down example. */ ?public FacetResult runDrillDown() throws IOException { ???index(); ???return drillDown(); ?} ?/** Runs the drill-sideways example. */ ?public List<FacetResult> runDrillSideways() throws IOException { ???index(); ???return drillSideways(); ?} ?/** Runs the search and drill-down examples and prints the results. */ ?public static void main(String[] args) throws Exception { ???System.out.println("Facet counting example:"); ???System.out.println("-----------------------"); ???SimpleFacetsExample example = new SimpleFacetsExample(); ???List<FacetResult> results1 = example.runFacetOnly(); ???System.out.println("Author: " + results1.get(0)); ???System.out.println("Publish Date: " + results1.get(1)); ???????System.out.println("Facet counting example (combined facets and search):"); ???System.out.println("-----------------------"); ???List<FacetResult> results = example.runSearch(); ???System.out.println("Author: " + results.get(0)); ???System.out.println("Publish Date: " + results.get(1)); ???????System.out.println("Facet drill-down example (Publish Date/2010):"); ???System.out.println("---------------------------------------------"); ???System.out.println("Author: " + example.runDrillDown()); ???System.out.println("Facet drill-sideways example (Publish Date/2010):"); ???System.out.println("---------------------------------------------"); ???for(FacetResult result : example.runDrillSideways()) { ?????System.out.println(result); ???} ?} ?}

查询及其关系

查询

 ?/** Lower-level search API. ??* ??* <p>{@link LeafCollector#collect(int)} is called for every matching document. ??* ??* @throws BooleanQuery.TooManyClauses If a query would exceed ???* ????????{@link BooleanQuery#getMaxClauseCount()} clauses. ??*/ ?public void search(Query query, Collector results) ???throws IOException { ???query = rewrite(query); ???search(leafContexts, createWeight(query, results.needsScores(), 1), results); ?}

关系

lucene源码分析(3)facet实例

原文地址:https://www.cnblogs.com/davidwang456/p/9952368.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved