diff options
author | Jebbs <qjebbs@gmail.com> | 2019-02-12 14:20:07 +0800 |
---|---|---|
committer | fguillot <fred@miniflux.net> | 2019-02-11 22:20:07 -0800 |
commit | 267b7065444b2904e1172817c661709e0b456b80 (patch) | |
tree | 1880cef296793738bf862ffd32690815b1b31dd8 /storage | |
parent | ed6ae7e0d277c53ac77b5f17327355ca76275556 (diff) |
Sort search results by relevance
Diffstat (limited to 'storage')
-rw-r--r-- | storage/entry.go | 6 | ||||
-rw-r--r-- | storage/entry_query_builder.go | 5 |
2 files changed, 7 insertions, 4 deletions
diff --git a/storage/entry.go b/storage/entry.go index 7b80ca0..ec31843 100644 --- a/storage/entry.go +++ b/storage/entry.go @@ -50,7 +50,7 @@ func (s *Storage) UpdateEntryContent(entry *model.Entry) error { query := ` UPDATE entries - SET document_vectors = to_tsvector(substring(title || ' ' || coalesce(content, '') for 1000000)) + SET document_vectors = setweight(to_tsvector(substring(coalesce(title, '') for 1000000)), 'A') || setweight(to_tsvector(substring(coalesce(content, '') for 1000000)), 'B') WHERE id=$1 AND user_id=$2 ` _, err = tx.Exec(query, entry.ID, entry.UserID) @@ -68,7 +68,7 @@ func (s *Storage) createEntry(entry *model.Entry) error { INSERT INTO entries (title, hash, url, comments_url, published_at, content, author, user_id, feed_id, document_vectors) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, to_tsvector(substring($1 || ' ' || coalesce($6, '') for 1000000))) + ($1, $2, $3, $4, $5, $6, $7, $8, $9, setweight(to_tsvector(substring(coalesce($1, '') for 1000000)), 'A') || setweight(to_tsvector(substring(coalesce($6, '') for 1000000)), 'B')) RETURNING id, status ` err := s.db.QueryRow( @@ -107,7 +107,7 @@ func (s *Storage) updateEntry(entry *model.Entry) error { query := ` UPDATE entries SET title=$1, url=$2, comments_url=$3, content=$4, author=$5, - document_vectors=to_tsvector(substring($1 || ' ' || coalesce($4, '') for 1000000)) + document_vectors = setweight(to_tsvector(substring(coalesce($1, '') for 1000000)), 'A') || setweight(to_tsvector(substring(coalesce($4, '') for 1000000)), 'B') WHERE user_id=$6 AND feed_id=$7 AND hash=$8 RETURNING id ` diff --git a/storage/entry_query_builder.go b/storage/entry_query_builder.go index 192f515..c4f6e43 100644 --- a/storage/entry_query_builder.go +++ b/storage/entry_query_builder.go @@ -33,6 +33,9 @@ func (e *EntryQueryBuilder) WithSearchQuery(query string) *EntryQueryBuilder { e.conditions = append(e.conditions, fmt.Sprintf("e.document_vectors @@ plainto_tsquery($%d)", len(e.args)+1)) e.args = append(e.args, query) } + // ordered by relevance, can be overrode + e.WithOrder(fmt.Sprintf("ts_rank(document_vectors, plainto_tsquery('%s'))", query)) + e.WithDirection("DESC") return e } @@ -315,7 +318,7 @@ func (e *EntryQueryBuilder) buildSorting() string { var parts []string if e.order != "" { - parts = append(parts, fmt.Sprintf(`ORDER BY "%s"`, e.order)) + parts = append(parts, fmt.Sprintf(`ORDER BY %s`, e.order)) } if e.direction != "" { |