diff --git a/examples/faceted_search.rs b/examples/faceted_search.rs new file mode 100644 index 000000000..76d167778 --- /dev/null +++ b/examples/faceted_search.rs @@ -0,0 +1,81 @@ +// # Basic Example +// +// This example covers the basic functionalities of +// tantivy. +// +// We will : +// - define our schema +// = create an index in a directory +// - index few documents in our index +// - search for the best document matchings "sea whale" +// - retrieve the best document original content. + +extern crate tempdir; + +// --- +// Importing tantivy... +#[macro_use] +extern crate tantivy; +use tantivy::collector::FacetCollector; +use tantivy::query::AllQuery; +use tantivy::schema::*; +use tantivy::Index; + +fn main() -> tantivy::Result<()> { + // Let's create a temporary directory for the + // sake of this example + let index_path = TempDir::new("tantivy_facet_example_dir")?; + let mut schema_builder = SchemaBuilder::default(); + + schema_builder.add_text_field("name", TEXT | STORED); + + // this is our faceted field + schema_builder.add_facet_field("tags"); + + let schema = schema_builder.build(); + + let index = Index::create_in_dir(&index_path, schema.clone())?; + + let mut index_writer = index.writer(50_000_000)?; + + let name = schema.get_field("name").unwrap(); + let tags = schema.get_field("tags").unwrap(); + + // For convenience, tantivy also comes with a macro to + // reduce the boilerplate above. + index_writer.add_document(doc!( + name => "the ditch", + tags => Facet::from("/pools/north") + )); + + index_writer.add_document(doc!( + name => "little stacey", + tags => Facet::from("/pools/south") + )); + + index_writer.commit()?; + + index.load_searchers()?; + + let searcher = index.searcher(); + + let mut facet_collector = FacetCollector::for_field(tags); + facet_collector.add_facet("/pools"); + + searcher.search(&AllQuery, &mut facet_collector).unwrap(); + + let counts = facet_collector.harvest(); + // This lists all of the facet counts + let facets: Vec<(&Facet, u64)> = counts.get("/pools").collect(); + assert_eq!( + facets, + vec![ + (&Facet::from("/pools/north"), 1), + (&Facet::from("/pools/south"), 1) + ] + ); + + Ok(()) +} + +use tempdir::TempDir; diff --git a/examples/working_with_json.rs b/examples/working_with_json.rs index 5de285df2..3c8e3c1ca 100644 --- a/examples/working_with_json.rs +++ b/examples/working_with_json.rs @@ -1,7 +1,6 @@ extern crate tantivy; use tantivy::schema::*; - // # Document from json // // For convenience, `Document` can be parsed directly from json. @@ -23,8 +22,8 @@ fn main() -> tantivy::Result<()> { }"#; // We can parse our document - let mice_and_men_doc = schema.parse_document(&mice_and_men_doc_json)?; - + let _mice_and_men_doc = schema.parse_document(&mice_and_men_doc_json)?; + // Multi-valued field are allowed, they are // expressed in JSON by an array. // The following document has two titles. @@ -32,8 +31,7 @@ fn main() -> tantivy::Result<()> { "title": ["Frankenstein", "The Modern Prometheus"], "year": 1818 }"#; - let frankenstein_doc = schema.parse_document(&frankenstein_json)?; - + let _frankenstein_doc = schema.parse_document(&frankenstein_json)?; // Note that the schema is saved in your index directory. //