在SAP HANA中组合LIKE和CONTAINS

时间:2015-10-30 10:15:19

标签: sql sap fuzzy-search hana hana-studio

请考虑我的表格中的以下条目:

  • red ap ple
  • 黄色ap ple
  • ap ple green
  • red a ple
  • ap pel 黄色

有些人使用非一致表示法填充此表格(之前的颜色之后的' apple'),也输入了一些拼写错误。 现在,我想查询所有带有apple字样的条目,无论颜色或拼写如何。

使用FUZZY()

SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" WHERE contains(name, 'apple', FUZZY(0.5))  

我只得到:

  • red ap ple
  • red a ple

添加通配符时:

SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" WHERE contains(name, '%apple%', FUZZY(0.5)) 

我只收到所有条目,其中apple拼写正确:

  • red ap ple
  • 黄色ap ple
  • ap ple green

为什么我无法在一个查询中合并运算符LIKECONTAINS

我需要找到:

  • 条目,其中apple被其他字词包围(在我的情况下为颜色)
  • 所有形式的apple(无论拼写如何)

3 个答案:

答案 0 :(得分:1)

select name from(
         SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" WHERE contains(name, 'apple', FUZZY(0.2)) --Part I
         UNION ALL
         SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" WHERE contains(name, '%apple%') --Part II
)group by name

此查询基本上将include子句的搜索结果与模糊搜索和常规搜索结合起来。您也可以使用like替换查询的第II部分。

答案 1 :(得分:1)

模糊算法与示例中列的完整内容相匹配。所以它比较了" apple"用"红苹果"和" appel yellow"

您想要的是匹配列中的标记。您可以通过创建全文索引来实现此目的,该索引将列中的内容标记为全文索引。 contains()将自动使用全文索引。

drop table MYTABLE1;
create column table MYTABLE1 
(
  name nvarchar(100)
);

insert into MYTABLE1 (name) values ('red apple');
insert into MYTABLE1 (name) values ('yellow apple');
insert into MYTABLE1 (name) values ('apple green');
insert into MYTABLE1 (name) values ('red aple');
insert into MYTABLE1 (name) values ('appel yellow');


CREATE FULLTEXT INDEX i_MYTABLE1 ON MYTABLE1(name) FUZZY SEARCH INDEX ON SYNC;

SELECT name FROM "MYTABLE1" WHERE contains(name, 'apple', FUZZY(0.5)) 

答案 2 :(得分:0)

也许你应该尝试以下标准的sql查询:

SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" WHERE name like '%apple%'

此查询将选择您的苹果。 关于你的模糊,为什么不在子查询中使用它? 类似的东西:

    SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" 
    WHERE contains(name, 'apple', FUZZY(0.5))
    and name in (
    SELECT name FROM "NEO_123456789ABCDE"."MYTABLE1" WHERE name like '%apple%'
    )