Portál AbcLinuxu, 17. května 2024 12:20


Dotaz: Django, vyhladavanie a diakritika

22.5.2008 18:05 hab | skóre: 8 | blog: hablog
Django, vyhladavanie a diakritika
Přečteno: 687×
Odpovědět | Admin
2 hodiny googlovania nepomohli:), tak skusam forum:

Chcel by som postavit aplikaciu na Djangu a momentalne riesim vyhladavanie. Ako backend je PostgreSQL, Django je vo verzii 0.96. Moja otazka: ako s co najvacsim vyuzitim Djangovskeho Model API vyriesit vyhladavanie s diakritikou?

Uvazujme: Na jednom PosgreSQL fore to chlapik (vseobecne pre databazu) to riesil pouzitim funkcie convert, kedy zaznamy previedol z utf8 na ascii a to iste spravil s hladanym vyrazom. Je toto v sucasnosti jedine riesenie a ak ano, ako ho pouzit s Model API?

Vdaka.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.5.2008 15:57 Honza Král | skóre: 3 | Praha
Rozbalit Rozbalit vše Re: Django, vyhladavanie a diakritika
Odpovědět | | Sbalit | Link | Blokovat | Admin
na tohle bych urcite doporucil fulltext, bud primo ten v postgres, ale nevim jestli ho django podporuje (pri nejhorsim ho lze nacpat do querysetu pres .extra() ), nebo primo nejaky fulltext engine. viz treba http://code.google.com/p/django-search/
23.5.2008 23:00 hab | skóre: 8 | blog: hablog
Rozbalit Rozbalit vše Re: Django, vyhladavanie a diakritika
pozeram tie riesenia pre fulltext, ale zaberie mi to asi viac casu. ak by si mi medzicasom vedel pomoct s tym, ako ho prinutit, aby pustil nizsie uvedenu query (nazov stlpca na konverziu je myapp_article.body), bol by som ti vdacny:
SELECT * FROM WHERE to_ascii(encode(convert_to(myapp_article.body, 'latin2'),'escape'),'latin2') ILIKE '%konicek%'
ja to skusam takto, ale dnes asi nie je moj den:)
Article.objects.extra(where=["to_ascii(encode(convert_to(myapp_article.body, 'latin2'),'escape'),'latin2') ILIKE %s"],params=['%konicek%'])
hodi to chybovu hlasku:
Traceback (most recent call last):
  File "console", line 1, in ?
  File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/django/db/models/query.py", line 102, in __repr__
    return repr(self._get_data())
  File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/django/db/models/query.py", line 470, in _get_data
    self._result_cache = list(self.iterator())
  File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/django/db/models/query.py", line 183, in iterator
    cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params)
  File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/django/db/backends/util.py", line 12, in execute
    return self.cursor.execute(sql, params)
  File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/django/db/backends/postgresql/base.py", line 43, in execute
    return self.cursor.execute(sql, [smart_basestring(p, self.charset) for p in params])
ProgrammingError: ERROR:  current transaction is aborted, commands ignored until end of transaction block
mimochodom, funkciu som nasiel tu este som sa chcel spytat, podla informacii fulltextove hladanie neignoruje diakritiku, takze by to tento problem nevyriesilo, alebo ano?

este raz diky
24.5.2008 13:17 Honza Král | skóre: 3 | Praha
Rozbalit Rozbalit vše Re: Django, vyhladavanie a diakritika
Odpovědět | | Sbalit | Link | Blokovat | Admin
o fulltextovem vyhledavani toho moc nevim, obavam se...

ale moznosti je nekolik - npriklad, nez to stale prevadet muze byt ten text bez diakritiky v db ulozit (pripadne treba pak nad takovym sloupcem postavit ten fulltext) a nad nim pak vyhledavat texty, ze kterych v pythonu diakritiku odstranim rucne.

jinak ta chyba co si poslal je az sekundarni - rika,ze transakce byla zrusena a db uz ignoruje vsechny dalsi prikazy, tedy je potreba najit ten prikaz, ktery ji zrusil.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.