new demo mode & tenure
This commit is contained in:
parent
7656f24544
commit
4a0f00f2a4
64 changed files with 2875 additions and 338 deletions
|
|
@ -251,6 +251,26 @@ pub(super) fn address_search_tokens(text: &str) -> Vec<String> {
|
|||
tokens
|
||||
}
|
||||
|
||||
/// Search tokens for a property row, covering its display address plus an
|
||||
/// alternative spelling (`alt`, the EPC form) when distinct — so the property is
|
||||
/// findable by either form. The result is deduped: each token appears at most
|
||||
/// once, which the inverted-index posting lists rely on (a token must post a
|
||||
/// given row exactly once to keep those lists strictly ascending and unique).
|
||||
pub(super) fn merged_address_search_tokens(display: &str, alt: Option<&str>) -> Vec<String> {
|
||||
let mut tokens = address_search_tokens(display);
|
||||
if let Some(alt) = alt {
|
||||
let alt = alt.trim();
|
||||
if !alt.is_empty() && alt != display.trim() {
|
||||
for token in address_search_tokens(alt) {
|
||||
if !tokens.contains(&token) {
|
||||
tokens.push(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tokens
|
||||
}
|
||||
|
||||
fn is_address_search_token(token: &str) -> bool {
|
||||
if looks_like_postcode_fragment(token) {
|
||||
return false;
|
||||
|
|
@ -929,6 +949,60 @@ mod tests {
|
|||
assert_eq!(parsed.text_groups[1].alternatives, vec!["cour".to_string()]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn merged_tokens_index_both_address_forms() {
|
||||
// A property whose price-paid form is "10 Park Road" but whose EPC form
|
||||
// names the building ("Kingswood House 10 Park Road") must be findable by
|
||||
// the building name too: the distinctive "kingswood" token comes only
|
||||
// from the EPC form.
|
||||
let display_only = address_search_tokens("10 Park Road");
|
||||
assert!(!display_only.contains(&"kingswood".to_string()));
|
||||
|
||||
let merged =
|
||||
merged_address_search_tokens("10 Park Road", Some("Kingswood House 10 Park Road"));
|
||||
assert!(merged.contains(&"kingswood".to_string()));
|
||||
// Tokens shared by both forms are still present and not duplicated.
|
||||
assert!(merged.contains(&"park".to_string()));
|
||||
assert!(merged.contains(&"road".to_string()));
|
||||
assert!(merged.contains(&"10".to_string()));
|
||||
|
||||
// No token repeats — posting-list uniqueness depends on this.
|
||||
let mut deduped = merged.clone();
|
||||
deduped.sort_unstable();
|
||||
deduped.dedup();
|
||||
assert_eq!(deduped.len(), merged.len());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn merged_tokens_ignore_redundant_or_missing_alt_form() {
|
||||
let baseline = address_search_tokens("12 Baker Street");
|
||||
// An EPC form identical to the display adds nothing.
|
||||
assert_eq!(
|
||||
merged_address_search_tokens("12 Baker Street", Some("12 Baker Street")),
|
||||
baseline
|
||||
);
|
||||
// A blank EPC form (whitespace) and an absent one are both no-ops.
|
||||
assert_eq!(
|
||||
merged_address_search_tokens("12 Baker Street", Some(" ")),
|
||||
baseline
|
||||
);
|
||||
assert_eq!(
|
||||
merged_address_search_tokens("12 Baker Street", None),
|
||||
baseline
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn merged_tokens_handle_epc_only_display() {
|
||||
// EPC-only dwellings have no price-paid form, so the EPC address IS the
|
||||
// display; passing it as both arguments must not duplicate its tokens.
|
||||
let epc = "Flat 4 Rosewood Court";
|
||||
assert_eq!(
|
||||
merged_address_search_tokens(epc, Some(epc)),
|
||||
address_search_tokens(epc)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn address_search_tokens_keep_actual_address_terms_for_scoring() {
|
||||
let tokens = address_search_tokens("Flat 2, 10 Downing Cour");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue