Skip to content

Commit

Permalink
Better ranking result
Browse files Browse the repository at this point in the history
  • Loading branch information
jespino committed Apr 6, 2016
1 parent 71fec82 commit 56ca925
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/krate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
plainto_tsquery($1) q,
ts_rank_cd(textsearchable_index_col, q) rank
WHERE q @@ textsearchable_index_col
ORDER BY rank DESC, crates.name ASC
ORDER BY name = $1 DESC, rank DESC, crates.name ASC
LIMIT $2 OFFSET $3".to_string(),
"SELECT COUNT(crates.*) FROM crates,
plainto_tsquery($1) q
Expand Down
41 changes: 41 additions & 0 deletions src/tests/krate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,47 @@ fn index_queries() {
assert_eq!(::json::<CrateList>(&mut response).crates.len(), 0);
}

#[test]
fn exact_match_first_on_queries() {
let (_b, app, middle) = ::app();

let mut req = ::req(app, Method::Get, "/api/v1/crates");
let _ = ::mock_user(&mut req, ::user("foo"));
let mut krate = ::krate("foo");
krate.description = Some("bar baz".to_string());
let (_, _) = ::mock_crate(&mut req, krate.clone());
let mut krate2 = ::krate("bar");
krate2.description = Some("foo baz foo baz".to_string());
let (_, _) = ::mock_crate(&mut req, krate2.clone());
let mut krate3 = ::krate("baz");
krate3.description = Some("foo bar foo bar foo bar".to_string());
let (_, _) = ::mock_crate(&mut req, krate3.clone());
let mut krate4 = ::krate("other");
krate4.description = Some("other".to_string());
let (_, _) = ::mock_crate(&mut req, krate4.clone());

let mut response = ok_resp!(middle.call(req.with_query("q=foo")));
let json: CrateList = ::json(&mut response);
assert_eq!(json.meta.total, 3);
assert_eq!(json.crates[0].name, "foo");
assert_eq!(json.crates[1].name, "baz");
assert_eq!(json.crates[2].name, "bar");

let mut response = ok_resp!(middle.call(req.with_query("q=bar")));
let json: CrateList = ::json(&mut response);
assert_eq!(json.meta.total, 3);
assert_eq!(json.crates[0].name, "bar");
assert_eq!(json.crates[1].name, "baz");
assert_eq!(json.crates[2].name, "foo");

let mut response = ok_resp!(middle.call(req.with_query("q=baz")));
let json: CrateList = ::json(&mut response);
assert_eq!(json.meta.total, 3);
assert_eq!(json.crates[0].name, "baz");
assert_eq!(json.crates[1].name, "bar");
assert_eq!(json.crates[2].name, "foo");
}

#[test]
fn show() {
let (_b, app, middle) = ::app();
Expand Down

0 comments on commit 56ca925

Please sign in to comment.