Ich führe eine gewichtete Suche auf einer Reihe von Elementen in einer E-Commerce-Plattform durch. Das Problem, das ich habe, ist ts_rank, das mir genau denselben Wert für verschiedene Kombinationen von Wörtern gibt, auch wenn der ts_vector verschiedene Positionen für jeden Satz von Wörtern gibt.PostgreSQL - machen ts_rank die ts_vector-Position nehmen wie sie ist oder eine benutzerdefinierte ts_rank-Funktion definieren
Lassen Sie mich dies illustrieren mit einem Beispiel:
Wenn ich ts_vector das Wort camas
geben, es gibt mir folgendes:
'cam':1
Wenn ich ts_vector das Wort geben sofas camas
, es gibt mir die folgende :
'cam':2 'sof':1
So wird camas
verschiedenen Positionen immer auf die Worte Kombination abhängig.
Wenn ich die folgende Anweisung:
select ts_rank(to_tsvector('camas'),to_tsquery('spanish','cama'));
PostgreSQL gibt mir 0.0607927
als ts_rank berechneten Wert, während der berechnete Wert für die folgende Erklärung ab:
select ts_rank(to_tsvector('sofas camas'),to_tsquery('spanish','cama'));
ist der gleiche Wert: 0.0607927
.
Wie kann das sein? Die Frage, die mir in den Sinn kommt, ist folgende: Gibt es eine Möglichkeit für ts_rank, die Position der in der ts_vector-Struktur enthaltenen Wörter so zu betrachten, wie sie ist, oder gibt es eine Möglichkeit, eine benutzerdefinierte ts_rank-Funktion zu definieren die Position für die Wörter wie erklärt?
Jede Hilfe würde sehr geschätzt werden.