Komposition erweiterte Suche
Die Erweiterte Suche machte mit den Nährwerten eine leicht unscharfe Suche:
nutritionFacts = []
if cal is not None:
nutritionFacts.append(
{'range': {'calories': {'gte': cal-50, 'lte': cal+50, 'boost': 10}}})
if fat is not None:
nutritionFacts.append(
{'range': {'fat': {'gte': fat-1, 'lte': fat+1, 'boost': 10}}})
if sod is not None:
nutritionFacts.append(
{'range': {'sodium': {'gte': sod-5, 'lte': sod+5, 'boost': 10}}})
if prot is not None:
nutritionFacts.append(
{'range': {'protein': {'gte': prot-1, 'lte': prot+1, 'boost': 10}}})
return nutritionFacts
Die Grenzen und Boosts wurden von @nr48bawy erstmal pragmatischer Weise per Try-and-Error festgelegt. Da sollten wir nochmal schauen, ob und mit welchen Parametern das gut funktioniert.
Gerade werden sowohl die Keyword-Queries als auch die Nutrition-Queries in einem großen should
-Block an Elasticsearch gesandt:
matchcases = matchLables(query) + matchNutrition(cal, fat, sod, prot)
query = {
'query': {
'bool': {
'should': matchcases
}
},
# ...
Ziel
Wünschenswert wäre folgendes Logik für das Anzeigen von Ergebnissen der erweiterten Suche:
- Frontend: Sende nur die im Frontend gesetzten Nutrition-Parameter (schon implementiert)
- Backend: Für alle Nährwerte in der Query:
- Wenn Nährwert im Dokument gesetzt: Matche mit leichter Unschärfe und wende ggf. Boost an. Fällt ein im Dokument gesetzter Nährwert aus dem Muster der Query, gilt das Dokument als irrelevant und soll nicht angezeigt werden!
- Wenn Nährwert im Dokument nicht gesetzt: Führe es Trotzdem mit auf, und wende ggf. negativen Boost an.
TODO
-
Datenanalyse der Wertebereiche der Nutrition-Werte: Grenzen der unscharfen Suche festlegen. -
Boost-Semantik prüfen (vielleicht hinfällig durch den nächsten Punkt) -
Nutrition-Query in separaten must
Block, sprich: Alle nährwert Parameter müssen matchen, sonst kein Ergebnis. -
Klären, wie verfahren wird, wenn Nährwerte nicht gesetzt sind. Möglich wäre ein negativer Boost, gar nich anzeigen, oder ein stärker Boost bei Rezepten, bei denen die Nährwerte gesetzt sind.
Edited by Jonathan Schlue