-gMIS 部署和应用的场景越来越多,最近在考虑为所有gMIS承载管理的数据库系统增加一个站内搜索功能, +InSiteSearch 。前因是在 2017年11月份的更新中,我们设想“层级目录导航是“传统”的,属于 Yahoo 时代的产物,未来的导航应该是 Google 式的智能导航。
未来拟开发一个 gMIS 域内全文搜索引擎,这样用户就无需使用或者记录层级目录。” (-R/p2SM)。 约半年后,我们实现了这方面的一个探索。
主要动机可以类比为Yahoo时代的目录搜索与Google时代的全文检索,当 -gMIS 所管理的对象超过一定数量级后,管理人员面临的问题就自然而然地迷失在多层复杂的目录式的导航中,如何有效地定位到目标功能模块成为迫切需要解决的问题。(在Google出现之前,用户想找某个主题/关键词的内容,需要去Yahoo的站点目录里去逐层逐级的查找相应的站点,Yahoo提供的网站目录满足了当时的需求)
站内搜索也被称之为局域网搜索Intranet search /Onsite search有别于互联网搜索Internet search. 其目的是搜索网址内部通常不公开的,格式化或者非格式化的内容。
- 站内搜索InSiteSearch主要思路
格式化数据的搜索是一个老课题。相对于非格式化数据,比如常见的网页数据,格式化数据有得天独厚的优势,我们能确切的预先知道,数据的格式、类型与规模。
在获得这些之后又该怎样实现站内搜索呢?
大致有两个思路,列如下。一是将待搜索的数据,读取到某个index service上实现对数据的indexing,当有某种关键词进行搜索时,按indexing的数据进行相应数据的返回。
这种方式,是事先、同步地将所有格式化数据同步到indexing 服务,并实现相应的增删改的操作同步。
也即,在格式化数据库/表之外,需要独立的建立一套应对全文搜索的数据结构存储系统,通常为 keyword–>pagelist 结构,也即某个待搜索关键词会对应一个包含该关键词的文档列表,其中列表的排序规则为某个权重值,其主要指标是为了表名当前关键词与当前文档的依存关系。
若无意外,该indexing的数据存储结果将同等尺寸于原始格式化数据。
另外一种思路,也即,是否可以为待搜索的数据提供某种roadmap(路书、地图),当有某种关键词进行搜索时,知道在什么地方以什么方式进行搜索。而实际数据的增删改人保留在原数据库/表中,当下的站内搜索InSiteSearch只是提供某种ShortCut服务,该服务能够实现以较为经济的、智能的方式,帮助调用者以较合理地方式返回预期的搜索内容。
可以设想,在这种思路下,系统不需要创建一套indexing服务,也不需要额外地复制全部格式化数据副本作为待检索的对象。
也即,当触发在全域进行某个关键词进行搜索时,InSiteSearch知道该关键词最可能出现在某些数据表的数据字段项上,而不太可能出现在其他字段项或者其他数据表相应的字段项上。
这种路书(地图)导引式的搜索辅助设施,将极大地提升搜索范围和搜索精度,在格式化数据的搜索上,很好的契合了搜索需求的应用场景。两相比较,在 -gMIS 中,我们选用了,基于路书的指引式站内搜索方式。
- 站内搜索InSiteSearch的实现方式
依据前述讨论,我们在 -gMIS 中实现了基于导引式地站内搜索实现。其主要操作内容如下。
A. 创建 insitesearch 表
用于存储当有基于某个关键词进行搜索时,所依赖的数据表路径。
insitesearch表的生成主要依赖 /act/insitesearchsort.php 程序。
该程序读取当前数据库连接下的所有数据表,并分析每个数据表的每个字段,如果发现当前字段数据可被检索字符串类型,通常为char(4-255),则将该数据库、数据表的数据字段记为待检索字段。
以此循环所有数据表的所有数据字段,生成待检索数据字段列表。
当有待搜索关键词递交到系统程序时, /extra/insitesearch.php , 站内搜索引擎程序按图索骥地逐个待搜索数据库、数据表、数据字段的进行检索。
根据当前页的size设置,搜索到N个结果时,自动返回给调用者,以此形成翻页功能。B. 增加站内搜索入口
对应地,我们在 进入系统主页和list view识图页面,在顶部导航栏增加了对 站内搜索 的接入功能,若用户需要进行站全域站内搜索,只需将待搜索关键词递交给搜索模块即可实现该功能。C. 动态更新搜索源
辅助地,我们在Π 首页 → 桌面 & 系统配置 → 搜索源配置 | 搜索源配置 增加了对 搜索源的配置与管理,在该模块可以实现对待搜索列表的手工更新与配置。当有新的数据模块被手工添加到当前数据库时,可以通过 “更新搜索源列表” 来实现对待搜索资源列表的更新与维护。
D. 精细化操作的黑白名单设置
同样地,我们在Π 首页 → 桌面 & 系统配置 → 搜索源黑白名单 | 搜索源黑白名单 额外地增加了对待搜索源的黑白名单设置,以满足特性的运营需求,比如当某个数据库的数据表的数据字段被程序规则判定为“黑名单”时,可以在此将相应的条件设置为允许“白名单”;同样地,当某个数据库的数据表的字段被程序判断为“白名单”而通过系统检测,可以在此将相应条件设置为“黑名单”,以阻止其进入待搜索队列。
- UI批量更新与优化
单条记录更新模块,增加了行间距,当字段之间跟容易识别;
字段名称加粗显示,区别与字段值、字段备注等信息;
列表显示时,增加了 break-all 属性,数据表默认不再撑破窗口,在纵向滚动和横向滚动中选择其一,仍不能排除某些情况下,纵横项同时滚动的可能;
更新GTAjax,修正增加对 Array.sort 的支持;
增加对List View下的活跃记录的所有字段值加粗显示,响应鼠标事件;
增加对JavaScript更多的异步调用,页面提速更快;
bugfix for getSelectOption;
+checkSQLKeyword;
+allow multiple order fields; - 增删改查搜算
截至 InSiteSearch 功能发布以后, -gMIS 的核心功能已经由 增删改查 升级为 增删改查搜算 (Create, Retrieve, Update, Delete, +Search, +Statistics)。
其中”搜” 指的是增加了站内搜索功能,而算 则是指 -gMIS 中的数据透视功能,可以轻易地实现对目标数据表的各种维度的数据统计计算功能。
可以预见 -gMIS 将从普通的通用信息管理功能逐渐升级改进,增加更多的商业智能功能模块,为业务运营支撑提供更多的信息数据与决策支持。
- GitHub 被 Microsoft 收购
会影响到 -gMIS 在 -Github 的托管与开源吗?
-gMIS 是一种基于 -GWA2 的通用管理信息系统(Management Information System)软件,具有可配置的输入和输出接口。
可以在其上构建各种管理应用软件系统,如
内容管理系统(CMS),客户资源管理(CRM), 企业资源计划管理(ERP),
办公自动化系统(OA)等, 以及各种行业应用管理系统软件,如
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统等等。
实现零代码开发、快速搭建各种管理信息系统(MIS).
-gMIS is a -GWA2 based Management Information System (MIS) software with configurable input and output interfaces.
Various management application software systems can be built on it, such as
Content Management System (CMS), Customer Resource Management (CRM), Enterprise Resource Planning Management (ERP),
Office automation systems (OA), as well as different industry application management system softwares, such as
Human Resource Management System (HR), Student Management, Archive Management, Tourism Management, Book Management,
Commodity management and business operations support systems, etc.
With zero code development, -gMIS can build a set of management information systems (MIS) software in a minute.
Lower Costs, Better Productivity.
降低成本, 提高效率.