Files
Odoo-Wiki/Base Search Fuzzy.md

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
19.0
18.0
17.0
16.0
15.0
14.0

Base Search Fuzzy

icon_oca_app

{{ $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]))