Base Search Fuzzy¶
![]()
Aktivieren Trigram-Index auf Datenbank-Felder.
Technischer Name: base_search_fuzzy
Repository: https://github.com/OCA/server-tools/tree/19.0/base_search_fuzzy
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:
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:
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]))