3.3 KiB
description, forge, kind, name, partner, prev, repo, title, versions
| description | forge | kind | name | partner | prev | repo | title | versions | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Aktivieren Trigram-Index auf Datenbank-Felder. | github.com | howto | base_search_fuzzy | OCA | ./database | OCA/server-tools | Base Search Fuzzy |
|
Base Search Fuzzy
{{ $frontmatter.description }}
Technischer Name: {{ $frontmatter.name }}
Repository: https://{{ $frontmatter.forge }}/{{ $frontmatter.repo }}/tree/{{ $frontmatter.versions[0] }}/{{ $frontmatter.name }}
Verwendung
Mit der Trigramm-Indexierung können Sie sog. Fuzzy Search ausführen.
Trigram-Indexierung für ausgewähltes Feld aktivieren
Navigieren Sie nach Einstellungen > Technisch > Datenbankstruktur > Trigram Index und erstellen Sie einen neuen Eintrag:
- Feld: Wählen Sie das Feld aus für welches ein Trigram-Index erstellt werden soll.
- Index Name: Wird automatisch vergeben.
- Index Typ: Wählen Sie den Index-Typ aus.
Entwicklung
Prüfen ob pg_trgm-Erweiterung installiert ist
Führen Sie den folgenden SQL-Befehl auf der Odoo-Datenbank aus:
SELECT * FROM pg_extension WHERE extname = 'pg_trgm';
Wenn die Erweiterung installier ist, erhalten Sie diesen Output:
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
--------+---------+----------+--------------+----------------+------------+-----------+--------------
861553 | pg_trgm | 10 | 2200 | t | 1.6 | |
(1 row)
Trigram-Index für Kontaktnamen erstellen
Legen Sie gemäss Trigram-Indexierung für ausgewähltes Feld aktivieren einen Index mit diesen Werten an:
- Feld:
display_name (res.partner) - Index Typ: GIN
Suchfilter anpassen
Damit eine Fuzzy Search funktioniert muss auf der Suchmaske der Suchfilter angepasst werden. Statt den Operator ilike, gibt es neu den Operator %. Mit einer Fuzzy Search werden Suchergebnisse zuverlässiger gefiltert. Hier ein Beispiel mit einem Rechtschreibefehler:
Kontakt Anzeigename indexieren
Navigieren Sie nach Einstellungen > Technisch > Serveraktionen und erstellen Sie einen neuen Eintrag:
Name der Aktion: Kontakt Anzeigename indexieren
Modell: server.actions
Typ: Code ausführen
Kopieren Sie die folgenden Zeilen in das Feld Python Code:
env.cr.execute("REINDEX INDEX display_name_gin_idx;")
env.cr.commit()
Kontakt Such-Query analysieren
Navigieren Sie nach Einstellungen > Technisch > Serveraktionen und erstellen Sie einen neuen Eintrag:
Name der Aktion: Kontakt Such-Query analyisieren
Modell: server.actions
Typ: Code ausführen
Kopieren Sie die folgenden Zeilen in das Feld Python Code:
env.cr.execute("""
SELECT id, name, email, similarity(name, 'Raul Ferra') AS score
FROM res_partner
WHERE similarity(name, 'Raul Ferra') > 0.3
ORDER BY score DESC;
""")
result = env.cr.fetchall()
raise UserError("\n".join([f"ID: {row[0]}, Name: {row[1]}, Email: {row[2]}, Score: {row[3]}" for row in result]))
