* fix: forgotten txn stuff
This commit is contained in:
+2
-2
@@ -85,10 +85,10 @@ class PackageDB(object):
|
||||
# index summary and description
|
||||
for (lang, doc) in package_info.summary.iteritems():
|
||||
if lang in ['en', 'tr']:
|
||||
pisi.search.add_doc('summary', lang, package_info.name, doc)
|
||||
pisi.search.add_doc('summary', lang, package_info.name, doc, txn)
|
||||
for (lang, doc) in package_info.description.iteritems():
|
||||
if lang in ['en', 'tr']:
|
||||
pisi.search.add_doc('description', lang, package_info.name, doc)
|
||||
pisi.search.add_doc('description', lang, package_info.name, doc, txn)
|
||||
|
||||
self.d.txn_proc(proc, txn)
|
||||
|
||||
|
||||
@@ -47,14 +47,14 @@ def finalize():
|
||||
ctx.invidx[id][lang].close()
|
||||
ctx.invidx = {}
|
||||
|
||||
def add_doc(id, lang, docid, str):
|
||||
def add_doc(id, lang, docid, str, txn = None):
|
||||
terms = preprocess(lang, str)
|
||||
ctx.invidx[id][lang].add_doc(docid, terms)
|
||||
ctx.invidx[id][lang].add_doc(docid, terms, txn)
|
||||
|
||||
def remove_doc(id, lang, docid, str):
|
||||
ctx.invidx[id][lang].remove_doc(docid)
|
||||
def remove_doc(id, lang, docid, str, txn = None):
|
||||
ctx.invidx[id][lang].remove_doc(docid, txn)
|
||||
|
||||
def query(id, lang, terms):
|
||||
def query(id, lang, terms, txn = None):
|
||||
import preprocess as p
|
||||
terms = map(lambda x: p.lower(lang, x), terms)
|
||||
return ctx.invidx[id][lang].query(terms)
|
||||
return ctx.invidx[id][lang].query(terms, txn)
|
||||
|
||||
@@ -15,7 +15,6 @@ import types
|
||||
|
||||
import pisi.lockeddbshelve as shelve
|
||||
|
||||
|
||||
class InvertedIndex(object):
|
||||
"""a database of term -> set of documents"""
|
||||
|
||||
@@ -25,36 +24,46 @@ class InvertedIndex(object):
|
||||
def close(self):
|
||||
self.d.close()
|
||||
|
||||
def has_term(self, term):
|
||||
return self.d.has_key(shelve.LockedDBShelf.encodekey(term))
|
||||
def has_term(self, term, txn = None):
|
||||
return self.d.has_key(shelve.LockedDBShelf.encodekey(term), txn)
|
||||
|
||||
def get_term(self, term):
|
||||
def get_term(self, term, txn = None):
|
||||
"""get set of doc ids given term"""
|
||||
term = shelve.LockedDBShelf.encodekey(term)
|
||||
if not self.has_term(term):
|
||||
self.d[term] = set()
|
||||
return self.d[term]
|
||||
def proc(txn):
|
||||
if not self.has_term(term, txn):
|
||||
self.d.put(term, set(), txn)
|
||||
return self.d.get(term, txn)
|
||||
return self.d.txn_proc(proc, txn)
|
||||
|
||||
def query(self, terms):
|
||||
docs = [ self.get_term(x) for x in terms ]
|
||||
return reduce(lambda x,y: x.union(y), docs)
|
||||
def query(self, terms, txn = None):
|
||||
def proc(txn):
|
||||
docs = [ self.get_term(x, txn) for x in terms ]
|
||||
return reduce(lambda x,y: x.union(y), docs)
|
||||
return self.d.txn_proc(proc, txn)
|
||||
|
||||
def list_terms(self):
|
||||
def list_terms(self, txn= None):
|
||||
list = []
|
||||
for term in self.d.iterkeys():
|
||||
list.append(term)
|
||||
return list
|
||||
def f(txn):
|
||||
for term in self.d.iterkeys(txn):
|
||||
list.append(term)
|
||||
return list
|
||||
return self.d.txn_proc(f, txn)
|
||||
|
||||
def add_doc(self, doc, terms):
|
||||
for term_i in terms:
|
||||
term_i = shelve.LockedDBShelf.encodekey(term_i)
|
||||
term_i_docs = self.get_term(term_i)
|
||||
term_i_docs.add(doc)
|
||||
self.d[term_i] = term_i_docs # update
|
||||
def add_doc(self, doc, terms, txn = None):
|
||||
def f(txn):
|
||||
for term_i in terms:
|
||||
term_i = shelve.LockedDBShelf.encodekey(term_i)
|
||||
term_i_docs = self.get_term(term_i, txn)
|
||||
term_i_docs.add(doc)
|
||||
self.d.put(term_i, term_i_docs, txn) # update
|
||||
return self.d.txn_proc(f, txn)
|
||||
|
||||
def remove_doc(self, doc, terms):
|
||||
for term_i in terms:
|
||||
term_i = shelve.LockedDBShelf.encodekey(term_i)
|
||||
term_i_docs = self.get_term(term_i)
|
||||
term_i_docs.remove(doc)
|
||||
self.d[term_i] = term_i_docs # update
|
||||
def f(txn):
|
||||
for term_i in terms:
|
||||
term_i = shelve.LockedDBShelf.encodekey(term_i)
|
||||
term_i_docs = self.get_term(term_i)
|
||||
term_i_docs.remove(doc)
|
||||
self.d.put(term_i, term_i_docs, txn) # update
|
||||
return self.d.txn_proc(f, txn)
|
||||
|
||||
Reference in New Issue
Block a user