Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

本文我们将会使用HANA STUDIO一步一步地创建和使用搜索规则。

创建表

首先我们创建一张表CUSTOMER, 后面我们将会在这张表上进行搜索:


CREATE COLUMN TABLE customer
(
  id INTEGER PRIMARY KEY,
  firstname SHORTTEXT(100) FUZZY SEARCH INDEX ON,
  lastname SHORTTEXT(100) FUZZY SEARCH INDEX ON,
  streetname NVARCHAR(100) FUZZY SEARCH INDEX ON,
  housenumber NVARCHAR(20) FUZZY SEARCH MODE 'housenumber',
  postcode NVARCHAR(20) FUZZY SEARCH INDEX ON FUZZY SEARCH MODE 'postcode',
  cityname NVARCHAR(100) FUZZY SEARCH INDEX ON,
  countrycode NVARCHAR(2),
  phone NVARCHAR(20),
  dateofbirth DATE
);


然后,我们在该表内插入如下内容:


INSERT INTO customer VALUES(1, 'Billy', 'Smith', 'Summerset Drv', '1001', '123456789', 'Littleton', 'US', '555-1234', '1950-12-01');
INSERT INTO customer VALUES(2, 'Bally', 'Smiths', 'Summerset Drv', '1001', '123456789', 'Littleton', 'US', '555-1234', '1950-12-01');


最终生成的表如下所示:

创建属性视图

由于目前SAP HANA仅支持在attribute viewscolumn views of type Join SQL views使用搜索规则进行搜索,因此我们需要基于该表创建一个attribute view

首先切换到HANA STUDIOSAP HANA ADMINISTRATION CONSOLE视图下,在我们使用的HANA实例的content目录下创建package app;并且在app下面再创建package customer

然后我们我们再在package customer下面创建属性视图,取名为customer

最终创建好的视图如下所示:

如果在激活视图过程中出现权限不如情况,我们可以执行以下语句来赋予权限:

GRANT SELECT ON CUSTOMER TO _sys_repo WITH GRANT OPTION;

验证视图数据是否正确

创建Search Rule Set

  1. 首先打开SAP HANA DEVELOPMENT视图
  2. SAP HANA Repositories视图下创建新的Repositories,名称为RuleRepo。其中HANA实例选择我们之前创建属性视图的HANA

3. 在Project视图下创建一个新的项目SearchRule,并且右键项目选择Team/Share Project把项目共享到之前创建的SearchRule repository下的'apps.customer' 包里。

4. 在SearchRule下面创建search.searchruleset搜索规则集合文件。

上图展示了我们刚刚创建的ruleset文件,可以看到里面的ViewRule都是空的。所以我们首先把我们之前创建的view名称填写进去。我们可以选择直接在属性视图中编辑相应的值

也可以将system视图下content里面的视图直接拖拽到View结点上,之后如下所示:

View结点下面有个Key Column结点,该结点主要用来保证返回记录的唯一性。因为我们可以针对一个视图定义多个Rule,每个Rule可能会返回相同的记录,这些记录合并去重的时候就需要靠我们定义的Key Column列了。这里我们定义了IDKey Column

注意我们所填写的列名称必须与定义视图时的一致。

接着我们开始编辑具体的Rule了。假设我们想搜索输入的记录与FIRSTNAME列相似度为0.8并且与LASTNAME相似度为0.8Customer记录。我们首先需要在Rule下面添加两列,Column名称分别设为FIRSTNAMELASTNAME。然后我们再将minFuzziness都设为0.8

如上图所示,我们可以看到还有参数Weight,该参数用来设置该列在计算最终score时所占的比例,默认为1完成上述所以步骤后,我们就可以进行搜索了。我们使用内置方法SYS.EXECUTE_SEARCH_RULE_SET进行搜索:


CALL SYS.EXECUTE_SEARCH_RULE_SET('
<query>
<ruleset name="app.customer.SearchRule.rule_set:search.searchruleset" />
<column name="FIRSTNAME">billy</column>
<column name="LASTNAME">smiths</column>
</query>
');


Ruleset的名称为我们之前创建的rule set文件名,注意package路径必须加上。然后把所有的列和值加上。