From 2fde5afc405ae7268b470eaee1072c7f6b2b9312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCrer=20=C3=96zen?= Date: Sat, 4 Nov 2006 13:13:00 +0000 Subject: [PATCH] =?UTF-8?q?Aramada=20kullan=C4=B1lan=20indeksler=20summary?= =?UTF-8?q?=20ve=20description=20i=C3=A7in=20ayr=C4=B1=20ayr=C4=B1=20idi.?= =?UTF-8?q?=20Bunun=20bir=20gere=C4=9Fi=20olmad=C4=B1=C4=9F=C4=B1=20i?= =?UTF-8?q?=C3=A7in=20her=20bir=20dil=20i=C3=A7in=20tek=20bir=20indeks=20t?= =?UTF-8?q?utacak=20=C5=9Fekilde=20kodu=20de=C4=9Fi=C5=9Ftirdim.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- pisi/api.py | 10 +++------- pisi/packagedb.py | 33 ++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/pisi/api.py b/pisi/api.py index 512c2496..0000445e 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -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 diff --git a/pisi/packagedb.py b/pisi/packagedb.py index 209919ea..736f6d5b 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -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):