日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lucene源码分析(3)facet实例

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lucene源码分析(3)facet实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單的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 indexDirectoryTaxonomyWriter 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 resultsList<FacetResult> results = new ArrayList<>();// Count both "Publish Date" and "Author" dimensionsFacets 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 resultsList<FacetResult> results = new ArrayList<>();// Count both "Publish Date" and "Author" dimensionsFacets 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 resultsFacets 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 resultsList<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); }

關系

?

轉載于:https://www.cnblogs.com/davidwang456/p/9952368.html

總結

以上是生活随笔為你收集整理的lucene源码分析(3)facet实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。