Oracle文本搜索范围

时间:2010-07-29 18:11:22

标签: oracle text oracle-text

我正在寻找一种更好的方法来搜索Oracle Text中的数值范围。我有一个数据库应用程序可以执行许多GIS类型的操作,但我们现在想要添加街道范围搜索。

所以我想将min和max值存储在一列中,并在这些值中搜索一个数字。我很乐意去探索各种选择,但是我想要指出去哪里。有人对我有什么建议吗?

编辑:我们只是想让地址查找更容易。地址部分上的文字取得了巨大成功,但我们希望存储街道范围而不是每个房屋号码。 因此,如果我搜索“11大街”,如果高街的范围是1到1000,我会期待一场比赛。我也想要一些我可以使用的选项,如果我搜索“平1 1大街” “不过。我希望在这些情况下我必须对输入做一些jiggery,我只想知道我可以尝试使用哪种工具。

2 个答案:

答案 0 :(得分:2)

有什么问题
WHERE <number> BETWEEN minColumn AND maxColumn

答案 1 :(得分:2)

我的建议是制作用于存储建筑物编号的标准长度字符串字段,在此字段上创建索引,然后使用between进行搜索。

像这样的格式:

NNNNNNCCCCBBBB

其中:

NNNNNN - 左边填充的门牌号码;
  CCCC - 左边填充的字符(如'11A'中的'A');
  BBBB - 左边填充的建筑物编号

在'left-padded'下我的意思是“在左侧用标准长度填充了一些符号”,例如参见select lpad('11',5,'X') from dual;查询的结果。

E.g。假设您有“11A high street building 5”地址并选择'%'作为填充符号。当转换为建议的格式时,它看起来像'%%%11%%%A%%%'和'high street'存储在分隔的字段中。 接下来是选择1到1000之间所有房屋的查询示例:

with address_list as (
  select '%%%11%%%A%%%%' bnum from dual union all
  select '%1001%%%A%%%%' bnum from dual union all
  select '%%%%1%%%A%%%%' bnum from dual union all
  select '%%%%1%%%%%%%%' bnum from dual union all
  select '%%321%%%A%%%%' bnum from dual union all
  select '%1000%%%A%%%%' bnum from dual union all
  select '%1000%%QQ%%12' bnum from dual 
)
select * from address_list
where 
  -- from '1 high street'
  bnum >= '%%%%1%%%%%%%%' 
  and                    
  -- less then '1001 high street'            
  bnum < '%1001%%%%%%%%' 
order by 
  bnum

在实际情况下,最好使用chr(1)或任何其他不可打印的符号作为填充符号。

另一件事是在没有实地存储的情况下仅为搜索构建基于函数的索引。