在导航系统中,检索主要应用于poi的检索和address的检索,并且对检索的需求定义也是变化多段,不同的区域需求也是不尽相同。如何设计一个好的检索的模块,使之能够应用于各种变化的需求也是非常重要。
检索的需求是变化最多的,即使谈好的需求,到最后都会稍微的改变行为,有时改完了又要改回来,最后是2个不同的行为都需要,外面可以通过参数来选择。所以灵活的检索设计是非常有必要的。
一个查询过程,可以分成,
1,用户输入参数,明确一个查询需求
2,engine进行查询
3,把查询后的结果放入一个结果集合里面,供用户读取结果。
这3个过程可以对应成3个小模块,分别为: iParam, iEngine,iResultSet。
从最顶层来看,这3个小模块就能组合成一个完整的 iQuery,即一个完整的查询过程。
iParam:描述了用户的输入,包括查找范围和过滤条件。比如用户想 “在上海市查找以‘横’开头的道路”, 那么 查找范围就是“上海市” 和 过滤条件就是“‘横’开头”。其中查找范围可以理解成一个行政区域。我们可以按不同的行政级别来继承出不同的iParam。 比如: CountryParam表示查找范围一个国家, StateParam表示查找范围为一个省,CityParam表示查找范围为一个市。过滤条件对不同的行政来说应该是一致,过滤条件也可以分成 前缀过滤,关键字过滤,首字母过滤。
iEngine: 执行具体的查找工作。一个eng