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:
+3
-7
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user