Aramada kullanılan indeksler summary ve description için

ayrı ayrı idi. Bunun bir gereği olmadığı için her bir dil
için tek bir indeks tutacak şekilde kodu değiştirdim.

ii-terms-en.bdb şeklinde dosyalarda tutuluyor arama indeksi
artık. Faik, sanırım yeni pisi paketinde rebuild-db gerekecek,
bunun için gerekli db versiyon arttırma işlemini yaparsın.

Ortak sözcükler bir kere tutulduğu için az bir yer kazancı
oldu. Summary ve desc için ayrı ayrı transaction yapılmadığı
için rebuild-db işlemi 25 saniye kadar hızlandı.

pisi.api.init küt diye tüm dbleri açtığı, ve dblerin gerektiğinde
kullanımı gibi bir durum olmadığı için, arama hala yalnızca
hardcoded tr ve en üzerinde yapılabiliyor. Bunu düzeltmek
yeni pardus sürümünden sonraya kalacak sanırım.

Herkes bir test etsin lütfen, önümüzdeki haftaki build'e
sokalım bu değişikliği.
This commit is contained in:
Gürer Özen
2006-11-04 13:13:00 +00:00
parent 5d15e1c61b
commit 2fde5afc40
2 changed files with 27 additions and 16 deletions
+3 -7
View File
@@ -107,7 +107,7 @@ def init(database = True, write = True,
ctx.componentdb = pisi.component.ComponentDB()
ctx.packagedb = packagedb.init_db()
ctx.sourcedb = pisi.sourcedb.init()
pisi.search.init(['summary', 'description'], ['en', 'tr'])
pisi.search.init(['terms'], ['en', 'tr'])
else:
ctx.repodb = None
ctx.installdb = None
@@ -333,9 +333,7 @@ def search_package_names(query):
def search_package_terms(terms, lang = None, search_names = True, repo = pisi.itembyrepodb.all):
if not lang:
lang = pisi.pxml.autoxml.LocalText.get_lang()
r1 = pisi.search.query_terms('summary', lang, terms, repo = repo)
r2 = pisi.search.query_terms('description', lang, terms, repo = repo)
r = r1.union(r2)
r = pisi.search.query_terms('terms', lang, terms, repo = repo)
if search_names:
for term in terms:
r |= search_package_names(term)
@@ -344,9 +342,7 @@ def search_package_terms(terms, lang = None, search_names = True, repo = pisi.it
def search_package(query, lang = None, search_names = True, repo = pisi.itembyrepodb.all):
if not lang:
lang = pisi.pxml.autoxml.LocalText.get_lang()
r1 = pisi.search.query('summary', lang, query, repo = repo)
r2 = pisi.search.query('description', lang, query, repo = repo)
r = r1.union(r2)
r = pisi.search.query('terms', lang, query, repo = repo)
if search_names:
r |= search_package_names(query)
return r
+24 -9
View File
@@ -104,13 +104,20 @@ class PackageDB(object):
# add component
ctx.componentdb.add_package(package_info.partOf, package_info.name, repo, txn)
# index summary and description
search_keys = {}
for (lang, doc) in package_info.summary.iteritems():
if lang in ['en', 'tr']:
pisi.search.add_doc('summary', lang, package_info.name, doc, repo=repo, txn=txn)
text = search_keys.get(lang, "")
text += " %s" % doc
search_keys[lang] = text
for (lang, doc) in package_info.description.iteritems():
if lang in ['en', 'tr']:
pisi.search.add_doc('description', lang, package_info.name, doc, repo=repo, txn=txn)
text = search_keys.get(lang, "")
text += " %s" % doc
search_keys[lang] = text
for lang in search_keys:
text = search_keys[lang]
# FIXME: other languages should be searchable too
if lang in ('en', 'tr'):
pisi.search.add_doc('terms', lang, package_info.name, doc, repo=repo, txn=txn)
ctx.txn_proc(proc, txn)
def clear(self, txn = None):
@@ -138,12 +145,20 @@ class PackageDB(object):
self.dr.remove_item(dep_name, repo, txn=txn)
ctx.componentdb.remove_package(package_info.partOf, package_info.name, repo, txn)
search_keys = {}
for (lang, doc) in package_info.summary.iteritems():
if lang in ['en', 'tr']:
pisi.search.remove_doc('summary', lang, package_info.name, doc, repo=repo, txn=txn)
text = search_keys.get(lang, "")
text += " %s" % doc
search_keys[lang] = text
for (lang, doc) in package_info.description.iteritems():
if lang in ['en', 'tr']:
pisi.search.remove_doc('description', lang, package_info.name, doc, repo=repo, txn=txn)
text = search_keys.get(lang, "")
text += " %s" % doc
search_keys[lang] = text
for lang in search_keys:
text = search_keys[lang]
# FIXME: other languages should be searchable too
if lang in ('en', 'tr'):
pisi.search.remove_doc('terms', lang, package_info.name, doc, repo=repo, txn=txn)
self.d.txn_proc(proc, txn)
def remove_repo(self, repo, txn = None):