diff --git a/src/index.rs b/src/index.rs index 65f88ff..f02bdbf 100644 --- a/src/index.rs +++ b/src/index.rs @@ -144,7 +144,6 @@ impl Index { }; let reader = index.reader().map_err(to_pyerr)?; - println!("reader {}", reader.searcher().segment_readers().len()); obj.init(Index { index, reader }); Ok(()) } @@ -215,6 +214,16 @@ impl Index { Ok(()) } + /// Acquires a Searcher from the searcher pool. + /// + /// If no searcher is available during the call, note that + /// this call will block until one is made available. + /// + /// Searcher are automatically released back into the pool when + /// they are dropped. If you observe this function to block forever + /// you probably should configure the Index to have a larger + /// searcher pool, or you are holding references to previous searcher + /// for ever. fn searcher(&self) -> Searcher { Searcher { inner: self.reader.searcher(), diff --git a/tantivy/__init__.py b/tantivy/__init__.py index c7c118e..b462ae2 100644 --- a/tantivy/__init__.py +++ b/tantivy/__init__.py @@ -1 +1 @@ -from .tantivy import * \ No newline at end of file +from .tantivy import * diff --git a/tests/tantivy_test.py b/tests/tantivy_test.py index e9a1b35..870f172 100644 --- a/tests/tantivy_test.py +++ b/tests/tantivy_test.py @@ -3,57 +3,56 @@ import pytest from tantivy import Document, Index, SchemaBuilder, Schema + def schema(): - return SchemaBuilder()\ - .add_text_field("title", stored=True)\ - .add_text_field("body")\ + return SchemaBuilder() \ + .add_text_field("title", stored=True) \ + .add_text_field("body") \ .build() + @pytest.fixture(scope="class") def ram_index(): - # assume all tests will use the same documents for now - # other methods may set up function-local indexes - index = Index(schema()) - writer = index.writer() + # assume all tests will use the same documents for now + # other methods may set up function-local indexes + index = Index(schema()) + writer = index.writer() - # 2 ways of adding documents - # 1 - doc = Document() - # create a document instance - # add field-value pairs - doc.add_text("title", "The Old Man and the Sea") - 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.")) - writer.add_document(doc) - # 2 use the built-in json support - # keys need to coincide with field names - doc = Document.from_dict({ - "title": "Of Mice and Men", - "body": ("A 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") - }) - writer.add_document(doc) - - writer.add_json("""{ + # 2 ways of adding documents + # 1 + doc = Document() + # create a document instance + # add field-value pairs + doc.add_text("title", "The Old Man and the Sea") + 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.")) + writer.add_document(doc) + # 2 use the built-in json support + # keys need to coincide with field names + doc = Document.from_dict({ + "title": "Of Mice and Men", + "body": ("A 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") + }) + writer.add_document(doc) + writer.add_json("""{ "title": ["Frankenstein", "The Modern Prometheus"], "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." }""") - - writer.commit() - index.reload() - return index - + writer.commit() + index.reload() + return index class TestClass(object): @@ -86,7 +85,6 @@ class TestClass(object): assert len(result) == 1 - def test_and_query_parser_default_fields(self, ram_index): query = ram_index.parse_query("winter", default_field_names=["title"]) assert repr(query) == """Query(TermQuery(Term(field=0,bytes=[119, 105, 110, 116, 101, 114])))""" @@ -98,7 +96,6 @@ class TestClass(object): "(Should, TermQuery(Term(field=1,bytes=[119, 105, 110, 116, 101, 114])))] " \ "})" - def test_query_errors(self, ram_index): index = ram_index # no "bod" field @@ -106,9 +103,9 @@ class TestClass(object): index.parse_query("bod:men", ["title", "body"]) - PATH_TO_INDEX = "tests/test_index/" + class TestFromDiskClass(object): def test_exists(self): @@ -123,29 +120,30 @@ class TestFromDiskClass(object): def test_create_readers(self): # not sure what is the point of this test. idx = Index(schema()) - assert idx.searcher().num_docs == 0 + assert idx.searcher().num_docs == 0 # by default this is manual mode writer = idx.writer(30000000, 1) - writer.add_document(Document(title="mytitle",body="mybody")) + writer.add_document(Document(title="mytitle", body="mybody")) writer.commit() - assert idx.searcher().num_docs == 0 + assert idx.searcher().num_docs == 0 # Manual is the default setting. # In this case, change are reflected only when # the index is manually reloaded. idx.reload() - assert idx.searcher().num_docs == 1 + assert idx.searcher().num_docs == 1 idx.config_reader("OnCommit", 4) - writer.add_document(Document(title="mytitle2",body="mybody2")) + writer.add_document(Document(title="mytitle2", body="mybody2")) writer.commit() import time for i in range(50): # The index should be automatically reloaded. # Wait for at most 5s for it to happen. time.sleep(0.1) - if idx.searcher().num_docs == 2: + if idx.searcher().num_docs == 2: return assert False + class TestSearcher(object): def test_searcher_repr(self, ram_index): assert repr(ram_index.searcher()) == "Searcher(num_docs=3, num_segments=1)" @@ -187,4 +185,4 @@ class TestDocument(object): def test_document_error(self): with pytest.raises(ValueError): - tantivy.Document(name={}) \ No newline at end of file + tantivy.Document(name={})