搜索试验

阅读(776) 标签: 搜索, 搜索试验, glxc,

本章主要介绍DQL的搜索试验。

查询数据时除了使用DQL查询,还可以使用搜索试验。使用搜索试验时,搜索语句贴近自然语言,只需要输入搜索语句或者关键词,就能查询到想要的数据。

如上图所示,用户想要查看Employee表的数据。那怎样能让业务人员无需了解数据库表结构,只要在界面上输入自然查询语句就可以随意查询数据呢?往下看。

步骤一:

新建词典文件。

打开元数据编辑设计器,在菜单栏中点击文件 - 新建

创建词典文件。

在菜单栏中点击工具 - 导入元数据,选择元数据文件。

确定后,生成词典。词典内容如下:

l  数据结构tab

如上图量纲部分,新建词典时,程序会初始化一些量纲、量词,用户可根据需要进行增删改。

如上图部分,可对表、表中的宏字段以及字段簇进行增删改。

 

l  编辑tab

词典中大部分搜索词都在这里定义

新建词典时,程序会初始化一些比较词、排序词、聚合词、连词、宏词和无效词,可根据需要进行增删改。

 

l  列表tab

词典中全部搜索词都在这里展示,双击任意词可跳转到该词的编辑页面

 

步骤二:

为了使搜索更方便,可以给词定义一个或多个方便记忆的名字,比如:

 

步骤三:

查看Employee表中的员工姓名。

菜单栏中点击工具 - 搜索实验

输入搜索语句:姓名,点击【搜索】按钮:

搜索结果中出现一个或多个结果。选中搜索结果,点击【查看明细】,可查看对应的DQL语句

点击【执行DQL】,查看搜索结果。

默认最多显示100条数据,此值可被修改,修改后点击【执行DQL刷新数据。

 

为了帮助用户更好的理解各种搜索语句,[集算器安装路径]\esProc\esproc-services\datalogic\conf下提供了词典文件demo.glxc下面我们通过demo.glxc来演示多种搜索语句的使用和设计。

Ø  表词

搜索语句:雇员

DQL

select Employee.EmpID as EmpID,Employee.Name as Name,Employee.Title as Title,Employee.BirthDate as BirthDate,Employee.HireDate as HireDate,Employee.Boss as Boss,Employee.HomeCity as HomeCity,year(now())-year(Employee.BirthDate) as Employee_age from Employee

浏览数据:

 

Ø  字段词

1

搜索语句:雇员姓名

DQL

select Employee.Name as 姓名 from Employee

浏览数据:

 

2

增加自定义字段,并为自定义字段添加字段词:

搜索语句:年龄大于40岁的雇员

DQL

select Employee.EmpID as EmpID,Employee.Name as Name,Employee.Title as Title,Employee.BirthDate as BirthDate,Employee.HireDate as HireDate,Employee.Boss as Boss,Employee.HomeCity as HomeCity,year(now())-year(Employee.BirthDate) as Employee_age from Employee where (year(now())-year(Employee.BirthDate)>40)

浏览数据:

需要说明的是,例子中对年龄的计算只是一种简化算法,如果需要精确的年龄,则需要比较日期。

 

3:

使用外键字段,并为外键字段添加字段词:

搜索语句:订单ID签单销售

DQL

select Orders.OrderID as 订单ID,Orders.EmployeeID.Name as 签单销售 from Orders

浏览数据:

 

Ø  维词

1:

搜索语句:今年Sanchuan订单金额

DQL

select Orders.ShipDate#Year as ShipDate,Orders.CustomerID as CustomerID,Orders.Amount as 订单金额 from Orders where (Orders.ShipDate#Year==year(now()))&&(Orders.CustomerID==\"ALFKI\")

浏览数据:

 

2:

搜索语句:北方地区的雇员姓名

DQL

select Employee.HomeCity#Area as HomeCity,Employee.Name as 姓名 from Employee where ([1,3,5].contain(Employee.HomeCity#Area))

浏览数据:

 

Ø  比较词

1

搜索语句:订单金额大于1000

DQL

select Orders.OrderID as OrderID,Orders.CustomerID as CustomerID,Orders.EmployeeID as EmployeeID,Orders.ReceiveDate as ReceiveDate,Orders.ShipDate as ShipDate,Orders.Amount as Amount,Orders.EmployeeID.Name as Orders_EmployeeID_Name from Orders where (Orders.Amount>1000)

浏览数据:

 

2

搜索语句:发货日期早于2011-02-12

DQL

select Orders.OrderID as OrderID,Orders.CustomerID as CustomerID,Orders.EmployeeID as EmployeeID,Orders.ReceiveDate as ReceiveDate,Orders.ShipDate as ShipDate,Orders.Amount as Amount,Orders.EmployeeID.Name as Orders_EmployeeID_Name from Orders where (Orders.ShipDate<date(2011,02,12)  )

浏览数据:

 

Ø  排序词

1

搜索语句:订单金额降序

DQL

select Orders.Amount as 订单金额 from Orders order by 订单金额 desc

浏览数据:

 

2

搜索语句:订单金额前5

DQL

select Orders.Amount as 订单金额 from Orders order by 订单金额 desc  limit  5

浏览数据:

 

Ø  动词

搜索语句:生于1978

搜索时,程序会去Employee_cluster1字段簇里找与1978年数据类型匹配的日期型宏字段Employee.BirthDate,再过滤出1978年的数据。

DQL

select Employee.EmpID as EmpID,Employee.Name as Name,Employee.Title as Title,Employee.BirthDate as BirthDate,Employee.HireDate as HireDate,Employee.Boss as Boss,Employee.HomeCity as HomeCity,year(now())-year(Employee.BirthDate) as Employee_age from Employee where (Employee.BirthDate#Year==1978)

浏览数据:

 

Ø  聚合词

1

搜索语句:订单金额总计

DQL

select Orders.sum(Orders.Amount) as 订单金额总计 from Orders

浏览数据:

 

2

搜索语句:客户订单金额总计

DQL

select Orders.sum(Orders.Amount) as 订单金额总计 on Customer as 客户 from Orders by Orders.CustomerID

浏览数据:

 

Ø  连词

搜索语句:订单金额小于200或者订单金额大于10000

DQL

select Orders.OrderID as OrderID,Orders.CustomerID as CustomerID,Orders.EmployeeID as EmployeeID,Orders.ReceiveDate as ReceiveDate,Orders.ShipDate as ShipDate,Orders.Amount as Amount,Orders.EmployeeID.Name as Orders_EmployeeID_Name from Orders where ((Orders.Amount<200) || (Orders.Amount>10000))

浏览数据:

 

Ø  宏词

搜索语句:最年轻的员工

DQL

select top 1 Employee.EmpID as EmpID,Employee.Name as Name,Employee.Title as Title,Employee.BirthDate as BirthDate,Employee.HireDate as HireDate,Employee.Boss as Boss,Employee.HomeCity as HomeCity,year(now())-year(Employee.BirthDate) as Employee_age from Employee order by year(now())-year(Employee.BirthDate) asc

浏览数据:

 

Ø  量词

1

搜索语句:金额大于1000

DQL

select ReturnedPmt.CustomerID as CustomerID,ReturnedPmt.ID as ID,ReturnedPmt.SellerID as SellerID,ReturnedPmt.Date as Date,ReturnedPmt.Amount as Amount,ReturnedPmt.VIPCustomer_End as VIPCustomer_End from ReturnedPmt where (ReturnedPmt.Amount>1000)

浏览数据:

 

搜索语句:金额大于1千元

DQL

select ReturnedPmt.CustomerID as CustomerID,ReturnedPmt.ID as ID,ReturnedPmt.SellerID as SellerID,ReturnedPmt.Date as Date,ReturnedPmt.Amount as Amount,ReturnedPmt.VIPCustomer_End as VIPCustomer_End from ReturnedPmt where (ReturnedPmt.Amount>1*1000.0)

浏览数据:同上

 

2

搜索语句:40岁以上姓名

DQL

select year(now())-year(Employee.BirthDate) as Employee_age,Employee.Name as 姓名 from Employee where (year(now())-year(Employee.BirthDate)>40)

浏览数据:

 

Ø  无效词

搜索语句:40岁以上的姓名

DQL

select year(now())-year(Employee.BirthDate) as Employee_age,Employee.Name as 姓名 from Employee where (year(now())-year(Employee.BirthDate)>40)

浏览数据:同上

各种词的定义和更详细的介绍,参考词典文件设计小节。