0
我有被分割成數據: -Postgres的搜索策略
- 郵編
- 鎮
- 地方
我的目標是建立一個搜索功能,將尋找任何文本按優先順序使用上述分段。即。首先尋找郵編,然後鎮然後地方
這可以有效地完成,而不必完全掃描郵政編碼/鎮之前獲得放置?我可以使用REGEX識別文本是郵編,城鎮和地點比較困難。
我很高興作爲PLPGSQL功能實現代碼,並沿着這些路線做出了戰略取得了一些進展: -
WITH POSTCODES AS (
SELECT postcode FROM postcode WHERE postcode ~* $1
), TOWNS AS (
SELECT town FROM towns WHERE (SELECT * FROM POSTCODES LIMIT 1) IS NULL AND town ~* $1
), PLACES AS (
SELECT place FROM places WHERE (SELECT * FROM TOWNS LIMIT 1) IS NULL AND place ~* $1
)
SELECT postcode as res FROM POSTCODE
UNION ALL
SELECT town as res FROM TOWNS
UNION ALL
SELECT place as res FROM PLACES
你可以,如果你的索引與依據或杜松子酒索引這些字段使用索引。我建議使用較低($ 1)的較低(鎮),然後索引較低(鎮)..一定要使用ORDER BY或其他一些條款,以確保郵編匹配先來先,城鎮,接下來,然後地方或你可能會得到混亂的結果。忘了提及,索引時使用pg_trgm和gist/gin索引。如果你有興趣,我可以提供這個完整的答案。 –