[Checkins] SVN: zope.index/trunk/ TextIndex: reuse lexicon from the underlying Okapi / Cosine index, if passed.
Tres Seaver
tseaver at palladion.com
Thu Jul 8 13:52:18 EDT 2010
Log message for revision 114347:
TextIndex: reuse lexicon from the underlying Okapi / Cosine index, if passed.
Fixes LP #232516.
Changed:
U zope.index/trunk/CHANGES.txt
U zope.index/trunk/src/zope/index/text/tests/test_textindex.py
U zope.index/trunk/src/zope/index/text/textindex.py
-=-
Modified: zope.index/trunk/CHANGES.txt
===================================================================
--- zope.index/trunk/CHANGES.txt 2010-07-08 17:52:16 UTC (rev 114346)
+++ zope.index/trunk/CHANGES.txt 2010-07-08 17:52:17 UTC (rev 114347)
@@ -4,8 +4,11 @@
Unreleased
----------
-- Avoid raising an exception when indexing None. (LP #598776)
+- TextIndex: reuse the lexicon from the underlying Okapi / Cosine
+ index, if passed. (LP #232516)
+- Lexicon: avoid raising an exception when indexing None. (LP #598776)
+
3.6.0 (2009-08-03)
------------------
Modified: zope.index/trunk/src/zope/index/text/tests/test_textindex.py
===================================================================
--- zope.index/trunk/src/zope/index/text/tests/test_textindex.py 2010-07-08 17:52:16 UTC (rev 114346)
+++ zope.index/trunk/src/zope/index/text/tests/test_textindex.py 2010-07-08 17:52:17 UTC (rev 114347)
@@ -106,19 +106,12 @@
self.failUnless(index.index._lexicon is lexicon)
def test_ctor_explicit_index(self):
- from zope.index.text.lexicon import CaseNormalizer
- from zope.index.text.lexicon import Lexicon
- from zope.index.text.lexicon import Splitter
- from zope.index.text.lexicon import StopWordRemover
- okapi = object()
+ lexicon = object()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(index=okapi)
self.failUnless(index.index is okapi)
- self.failUnless(isinstance(index.lexicon, Lexicon))
- pipeline = index.lexicon._pipeline
- self.assertEqual(len(pipeline), 3)
- self.failUnless(isinstance(pipeline[0], Splitter))
- self.failUnless(isinstance(pipeline[1], CaseNormalizer))
- self.failUnless(isinstance(pipeline[2], StopWordRemover))
+ # See LP #232516
+ self.failUnless(index.lexicon is lexicon)
def test_ctor_explicit_lexicon_and_index(self):
lexicon = object()
@@ -129,40 +122,40 @@
def test_index_doc(self):
lexicon = object()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(lexicon, okapi)
index.index_doc(1, 'cats and dogs')
self.assertEqual(okapi._indexed[0], (1, 'cats and dogs'))
def test_unindex_doc(self):
lexicon = object()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(lexicon, okapi)
index.unindex_doc(1)
self.assertEqual(okapi._unindexed[0], 1)
def test_clear(self):
lexicon = object()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(lexicon, okapi)
index.clear()
self.failUnless(okapi._cleared)
def test_documentCount(self):
lexicon = object()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(lexicon, okapi)
self.assertEqual(index.documentCount(), 4)
def test_wordCount(self):
lexicon = object()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(lexicon, okapi)
self.assertEqual(index.wordCount(), 45)
def test_apply_no_results(self):
lexicon = DummyLexicon()
- okapi = DummyOkapi({})
+ okapi = DummyOkapi(lexicon, {})
index = self._makeOne(lexicon, okapi)
self.assertEqual(index.apply('anything'), {})
self.assertEqual(okapi._query_weighted, [])
@@ -170,7 +163,7 @@
def test_apply_w_results(self):
lexicon = DummyLexicon()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
index = self._makeOne(lexicon, okapi)
results = index.apply('anything')
self.assertEqual(results[1], 14.0 / 42.0)
@@ -181,7 +174,7 @@
def test_apply_w_results_zero_query_weight(self):
lexicon = DummyLexicon()
- okapi = DummyOkapi()
+ okapi = DummyOkapi(lexicon)
okapi._query_weight = 0
index = self._makeOne(lexicon, okapi)
results = index.apply('anything')
@@ -196,7 +189,7 @@
DIVISOR = sys.maxint / 10
lexicon = DummyLexicon()
# cause TypeError in division
- okapi = DummyOkapi({1: '14.0', 2: '7.4', 3: '3.2'})
+ okapi = DummyOkapi(lexicon, {1: '14.0', 2: '7.4', 3: '3.2'})
index = self._makeOne(lexicon, okapi)
results = index.apply('anything')
self.assertEqual(results[1], DIVISOR)
@@ -212,7 +205,8 @@
_word_count = 45
_query_weight = 42.0
- def __init__(self, search_results=None):
+ def __init__(self, lexicon, search_results=None):
+ self.lexicon = lexicon
self._indexed = []
self._unindexed = []
self._searched = []
Modified: zope.index/trunk/src/zope/index/text/textindex.py
===================================================================
--- zope.index/trunk/src/zope/index/text/textindex.py 2010-07-08 17:52:16 UTC (rev 114346)
+++ zope.index/trunk/src/zope/index/text/textindex.py 2010-07-08 17:52:17 UTC (rev 114347)
@@ -37,11 +37,13 @@
This creates the lexicon and index if not passed in.
"""
+ _explicit_lexicon = True
if lexicon is None:
+ _explicit_lexicon = False
lexicon = Lexicon(Splitter(), CaseNormalizer(), StopWordRemover())
if index is None:
index = OkapiIndex(lexicon)
- self.lexicon = lexicon
+ self.lexicon = _explicit_lexicon and lexicon or index.lexicon
self.index = index
def index_doc(self, docid, text):
More information about the checkins
mailing list