我有一個數據庫表充滿了谷歌地圖地址解析響應的地址。谷歌縮寫所有方向(西 - > W,東 - > E等)。模糊街道地址搜索使用MySQL全文(或sphinx?)
因此,如果我輸入地址如「100 West Pender Street」,則Google地圖返回的格式地址爲「100 W Pender St」,我將其插入到我的表格中。
現在,如果一個用戶走來,並搜索該地址,以下所有條件應符合:
彭德街 西彭得街 100彭德 100瓦特彭德 100西彭德
,他們或多或少地做。表中的「w」會被忽略,因爲它低於最小字長。搜索結果中給予東潘納的地址的權重相等(「E」也被忽略)。
處理這個問題的最佳方法是什麼?
我懷疑設置最小字長度爲1是一件「壞事」。
我可以在谷歌地址中搜索並替換已知的縮寫(N,E,S,W,St,Ave,Dr等),並用它們的擴展替換它們 - 但有一些街道名稱如果這是無效的(一些城市有單字母街道名稱:J街等...)
也像「123 160聖」的地址根本無法搜索,因爲街道號碼(123)和街道名稱( 160)都低於最小字長。
MySQL FullText是正確的方法嗎? 獅身人面像提供更好的東西嗎?
或者還有其他解決方案我還沒有考慮過嗎?請記住,用戶的搜索查詢不僅會與該媒體資源的地址相匹配,還會與其他文本列(如媒體資源名稱和說明)進行匹配。
您可以用'ft_min_word_length'減少mysql的全文最小字長度,但將其降低到2或1會增加「噪音」結果的數量。另外,請小心縮略語。在我的城市裏有一個「西方新月」,因爲那是一個人的名字,而不是一個方向。 –
爲什麼不用方向(N,E,W,S)創建一個新字段,然後用** field ='S'**進行搜索,或者如果倍數搜索使用字段IN('S','N') –
Marc - 我很擔心噪聲,特別是如果我必須將它設置爲1來捕獲N,E,S,W大衛 - 從地理編碼器返回的地址沒有方向作爲單獨的字段我將不得不將它從全文字段中解析出來,這對於實際上被命名爲「N」或「E」的街道來說可能是有問題的。 – emh