diff --git a/examples/html/simple_search.html b/examples/html/simple_search.html index 1cfc7ac6e..1aa6b63ab 100644 --- a/examples/html/simple_search.html +++ b/examples/html/simple_search.html @@ -52,7 +52,7 @@
-

Let’s create a temporary directory for the +

Let’s create a temporary directory for the sake of this example

@@ -60,7 +60,7 @@ sake of this example

    if let Ok(dir) = TempDir::new("tantivy_example_dir") {
         run_example(dir.path()).unwrap();
         dir.close().unwrap();
-    }   
+    }
 }
 
 
@@ -78,7 +78,7 @@ sake of this example

Defining the schema

The Tantivy index requires a very strict schema. The schema declares which fields are in the index, -and for each field, its type and “the way it should +and for each field, its type and “the way it should be indexed”.

@@ -111,12 +111,12 @@ be indexed”.

We want full-text search for it, and we want to be able to retrieve the document after the search.

TEXT | STORED is some syntactic sugar to describe -that.

+that.

TEXT means the field should be tokenized and indexed, along with its term frequency and term positions.

STORED means that the field will also be saved in a compressed, row-oriented key-value store. -This store is useful to reconstruct the +This store is useful to reconstruct the documents that were selected during the search phase.

@@ -139,7 +139,7 @@ to retrieve the body after the search.

    schema_builder.add_text_field("body", TEXT);
-    
+
     let schema = schema_builder.build();
@@ -173,14 +173,12 @@ with our schema in the directory.

There must be only one writer at a time. This single IndexWriter is already multithreaded.

-

Here we use a buffer of 1 GB. Using a bigger -heap for the indexer can increase its throughput. -This buffer will be split between the indexing -threads.

+

Here we use a buffer of 50MB per thread. Using a bigger +heap for the indexer can increase its throughput.

-
    let mut index_writer = try!(index.writer(1_000_000_000));
+
    let mut index_writer = try!(index.writer(50_000_000));
@@ -213,10 +211,12 @@ one by one in a Document object.

    let title = schema.get_field("title").unwrap();
     let body = schema.get_field("body").unwrap();
-     
+
     let mut old_man_doc = Document::default();
     old_man_doc.add_text(title, "The Old Man and the Sea");
-    old_man_doc.add_text(body, "He was an old man who fished alone in a skiff in the Gulf Stream and he had gone eighty-four days now without taking a fish.");
+ old_man_doc.add_text(body, + "He was an old man who fished alone in a skiff in the Gulf Stream and \ + he had gone eighty-four days now without taking a fish."); @@ -231,7 +231,7 @@ one by one in a Document object.

-
    try!(index_writer.add_document(old_man_doc));
+
    index_writer.add_document(old_man_doc);
@@ -248,13 +248,13 @@ a document object directly from json.

-
    
+            
     let mice_and_men_doc = try!(schema.parse_document(r#"{
        "title": "Of Mice and Men",
        "body": "few miles south of Soledad, the Salinas River drops in close to the hillside bank and runs deep and green. The water is warm too, for it has slipped twinkling over the yellow sands in the sunlight before reaching the narrow pool. On one side of the river the golden foothill slopes curve up to the strong and rocky Gabilan Mountains, but on the valley side the water is lined with trees—willows fresh and green with every spring, carrying in their lower leaf junctures the debris of the winter’s flooding; and sycamores with mottled, white,recumbent limbs and branches that arch over the pool"  
     }"#));
-    
-    try!(index_writer.add_document(mice_and_men_doc));
+ + index_writer.add_document(mice_and_men_doc);
@@ -275,7 +275,7 @@ The following document has two titles.

"title": ["Frankenstein", "The Modern Promotheus"], "body": "You will rejoice to hear that no disaster has accompanied the commencement of an enterprise which you have regarded with such evil forebodings. I arrived here yesterday, and my first task is to assure my dear sister of my welfare and increasing confidence in the success of my undertaking." }"#)); - try!(index_writer.add_document(frankenstein_doc)); + index_writer.add_document(frankenstein_doc); @@ -288,7 +288,7 @@ The following document has two titles.

This is an example, so we will only index 3 documents here. You can check out tantivy’s tutorial to index -the English wikipedia. Tantivy’s indexing is rather fast. +the English wikipedia. Tantivy’s indexing is rather fast. Indexing 5 million articles of the English wikipedia takes around 4 minutes on my computer!

@@ -343,15 +343,13 @@ commit.

Searching

-

Let’s search our index. We start -by creating a searcher. There can be more -than one searcher at a time.

-

You should create a searcher -every time you start a “search query”.

+

Let’s search our index. Start by reloading +searchers in the index. This should be done +after every commit().

-
    let searcher = index.searcher();
+
    try!(index.load_searchers());
@@ -362,14 +360,13 @@ every time you start a “search query”.

-

The query parser can interpret human queries. -Here, if the user does not specify which -field they want to search, tantivy will search -in both title and body.

+

Afterwards create one (or more) searchers.

+

You should create a searcher +every time you start a “search query”.

-
    let query_parser = QueryParser::new(index.schema(), vec!(title, body));
+
    let searcher = index.searcher();
@@ -380,6 +377,24 @@ in both title and body.

+

The query parser can interpret human queries. +Here, if the user does not specify which +field they want to search, tantivy will search +in both title and body.

+ + + +
    let query_parser = QueryParser::new(index.schema(), vec![title, body]);
+ + + + +
  • +
    + +
    + +

    QueryParser may fail if the query is not in the right format. For user facing applications, this can be a problem. A ticket has been opened regarding this problem.

    @@ -391,11 +406,11 @@ A ticket has been opened regarding this problem.

  • -
  • +
  • - +

    A query defines a set of documents, as well as the way they should be scored.

    @@ -408,36 +423,20 @@ any document matching at least one of our terms.

  • -
  • -
    - -
    - -
    -

    Collectors

    -

    We are not interested in all of the documents but -only in the top 10. Keeping track of our top 10 best documents -is the role of the TopCollector.

    - -
    - -
        
    -    let mut top_collector = TopCollector::with_limit(10);
    - -
  • - -
  • -

    We can now perform our query.

    +

    Collectors

    +

    We are not interested in all of the documents but +only in the top 10. Keeping track of our top 10 best documents +is the role of the TopCollector.

    -
        try!(searcher.search(&query, &mut top_collector)));
    +
        let mut top_collector = TopCollector::with_limit(10);
  • @@ -448,12 +447,11 @@ is the role of the TopCollector.

    -

    Our top collector now contains the 10 -most relevant doc ids…

    +

    We can now perform our query.

    -
        let doc_addresses = top_collector.docs();
    +
        try!(searcher.search(&*query, &mut top_collector));
    @@ -464,7 +462,23 @@ most relevant doc ids…

    -

    The actual documents still need to be +

    Our top collector now contains the 10 +most relevant doc ids…

    + + + +
        let doc_addresses = top_collector.docs();
    + + + + +
  • +
    + +
    + +
    +

    The actual documents still need to be retrieved from Tantivy’s store.

    Since the body field was not configured as stored, the document returned will only contain @@ -472,10 +486,10 @@ a title.

    -
        
    +            
         for doc_address in doc_addresses {
    -         let retrieved_doc = try!(searcher.doc(&doc_address));
    -         println!("{}", schema.to_json(&retrieved_doc));
    +        let retrieved_doc = try!(searcher.doc(&doc_address));
    +        println!("{}", schema.to_json(&retrieved_doc));
         }
     
         Ok(())