请考虑我的表格中的以下条目:
有些人使用非一致表示法填充此表格(之前的颜色或之后的' 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
拼写正确:
为什么我无法在一个查询中合并运算符LIKE和CONTAINS?
我需要找到:
apple
被其他字词包围(在我的情况下为颜色)apple
(无论拼写如何)答案 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%'
)