在 SAP HANA 中结合喜欢和包含

问题描述 投票:0回答:3

考虑我表中的以下条目:

  • 红苹果苹果
  • 黄苹果苹果
  • 苹果苹果绿色
  • 红苹果
  • appel黄色

有几个人使用不一致的符号(颜色beforeafter'apple')填充了这张表,还输入了一些拼写错误。 现在我想查询所有包含单词

apple
的条目,无论颜色或拼写如何。

FUZZY()

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

我只得到:

  • 红苹果苹果
  • 红苹果

添加通配符时:

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

我只得到所有条目,其中

apple
拼写正确:

  • 红苹果苹果
  • 黄苹果苹果
  • 苹果苹果绿色

为什么我不能在一个查询中同时使用运算符LIKECONTAINS

我需要找到:

  • 条目,其中
    apple
    被其他词包围(在我的例子中是颜色)
  • 所有形式的
    apple
    (无论拼写如何)
sql hana fuzzy-search hana-studio
3个回答
2
投票
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

这个查询基本上是将包含子句的搜索结果与模糊搜索和普通搜索结合起来。您也可以将查询的第二部分替换为喜欢。


2
投票

模糊算法匹配示例中列的完整内容。所以它将“apple”与“red 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)) 

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%'
    )
© www.soinside.com 2019 - 2024. All rights reserved.