Version 1.0.6: Kombinierte Suche über mehrere Felder

This commit is contained in:
2025-03-17 22:49:27 +01:00
parent bbcd04fd21
commit 160ec2aad9
3 changed files with 49 additions and 30 deletions

View File

@@ -5,6 +5,11 @@ Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/), Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/). und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/).
## [1.0.6] - 2024-03-17
### Geändert
- Verbesserte Suchfunktion: Kombinierte Suche über mehrere Felder möglich
- Dokumentation: Beispiele für kombinierte Suche hinzugefügt
## [1.0.5] - 2024-03-17 ## [1.0.5] - 2024-03-17
### Geändert ### Geändert
- Verbesserte Suchfunktion: Ergebnisliste wird gelöscht, wenn alle Suchfelder leer sind - Verbesserte Suchfunktion: Ergebnisliste wird gelöscht, wenn alle Suchfelder leer sind

View File

@@ -12,6 +12,7 @@ Eine webbasierte Kundensuche für medisoftware mit erweiterten Suchfunktionen.
- Fachrichtung - Fachrichtung
- Telefon - Telefon
- Allgemeine Suche über alle Felder - Allgemeine Suche über alle Felder
- Kombinierte Suche über mehrere Felder
- Hervorhebung der Suchbegriffe in den Ergebnissen - Hervorhebung der Suchbegriffe in den Ergebnissen
- Direkte Links zu: - Direkte Links zu:
- medisoftware Kundenkartei (Kundennummer) - medisoftware Kundenkartei (Kundennummer)
@@ -81,6 +82,18 @@ curl "http://localhost:5001/search?telefon=030"
curl "http://localhost:5001/search?q=Suchbegriff" curl "http://localhost:5001/search?q=Suchbegriff"
``` ```
### Kombinierte Suche
```bash
# Suche nach Fachrichtung und Ort
curl "http://localhost:5001/search?fachrichtung=Zahnarzt&ort=Berlin"
# Suche nach Name und Telefon
curl "http://localhost:5001/search?name=Mustermann&telefon=030"
# Suche nach mehreren Kriterien
curl "http://localhost:5001/search?fachrichtung=Zahnarzt&ort=Berlin&name=Schmidt"
```
## Version ## Version
Aktuelle Version: [1.0.5](CHANGELOG.md#105---2024-03-17) Aktuelle Version: [1.0.5](CHANGELOG.md#105---2024-03-17)

61
app.py
View File

@@ -13,7 +13,7 @@ logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Version der Anwendung # Version der Anwendung
VERSION = "1.0.2" VERSION = "1.0.6"
# Pfad zur CSV-Datei # Pfad zur CSV-Datei
CSV_FILE = "data/customers.csv" CSV_FILE = "data/customers.csv"
@@ -68,10 +68,12 @@ def search():
telefon = request.args.get('telefon', '').strip() telefon = request.args.get('telefon', '').strip()
query = request.args.get('q', '').strip() query = request.args.get('q', '').strip()
# Wenn keine spezifischen Suchkriterien angegeben sind, aber eine allgemeine Suche # Initialisiere die Maske für die Filterung
if not any([name, ort, kundennummer, fachrichtung, telefon]) and query: mask = pd.Series(True, index=df.index)
# Suche in allen relevanten Feldern
mask = ( # Wenn eine allgemeine Suche angegeben ist
if query:
query_mask = (
df['Vorname'].str.contains(query, case=False, na=False) | df['Vorname'].str.contains(query, case=False, na=False) |
df['Nachname'].str.contains(query, case=False, na=False) | df['Nachname'].str.contains(query, case=False, na=False) |
df['Ort'].str.contains(query, case=False, na=False) | df['Ort'].str.contains(query, case=False, na=False) |
@@ -79,32 +81,31 @@ def search():
df['Fachrichtung'].str.contains(query, case=False, na=False) | df['Fachrichtung'].str.contains(query, case=False, na=False) |
df['Tel'].astype(str).str.contains(query, case=False, na=False) df['Tel'].astype(str).str.contains(query, case=False, na=False)
) )
else: mask &= query_mask
# Spezifische Suche
mask = pd.Series(True, index=df.index) # Spezifische Suchkriterien anwenden
if name:
if name: name_mask = (
name_mask = ( df['Vorname'].str.contains(name, case=False, na=False) |
df['Vorname'].str.contains(name, case=False, na=False) | df['Nachname'].str.contains(name, case=False, na=False)
df['Nachname'].str.contains(name, case=False, na=False) )
) mask &= name_mask
mask &= name_mask
if ort:
if ort: ort_mask = df['Ort'].str.contains(ort, case=False, na=False)
ort_mask = df['Ort'].str.contains(ort, case=False, na=False) mask &= ort_mask
mask &= ort_mask
if kundennummer:
if kundennummer: kundennummer_mask = df['Nummer'].astype(str).str.contains(kundennummer, case=False, na=False)
kundennummer_mask = df['Nummer'].astype(str).str.contains(kundennummer, case=False, na=False) mask &= kundennummer_mask
mask &= kundennummer_mask
if fachrichtung:
if fachrichtung: fachrichtung_mask = df['Fachrichtung'].str.contains(fachrichtung, case=False, na=False)
fachrichtung_mask = df['Fachrichtung'].str.contains(fachrichtung, case=False, na=False) mask &= fachrichtung_mask
mask &= fachrichtung_mask
if telefon: if telefon:
telefon_mask = df['Tel'].astype(str).str.contains(telefon, case=False, na=False) telefon_mask = df['Tel'].astype(str).str.contains(telefon, case=False, na=False)
mask &= telefon_mask mask &= telefon_mask
results = df[mask].to_dict('records') results = df[mask].to_dict('records')
logger.info(f"{len(results)} Ergebnisse gefunden") logger.info(f"{len(results)} Ergebnisse gefunden")