Oracle 11g の Contains() 関数を使用して、ユーザーが入力したフィールドに含まれる正確なテキストを検索する必要がありました。「いいね」演算子を使用しないように求められました。
Oracleのドキュメントによると、すべてが機能するには次のことが必要です。
- 二重
}
文字 - 入力全体を間に入れます
{}
これは、一部を除いてほとんどの場合に機能します。その下にテストケースがあります:
create table theme
(name varchar2(300 char) not null);
insert into theme (name)
values ('a');
insert into theme (name)
values ('b');
insert into theme (name)
values ('a or b');
insert into theme (name)
values ('Pdz344_1_b');
create index name_index on theme(name) indextype is ctxsys.context;
演算子が解釈された場合、'or'
4 つの結果すべてが得られますが、そうではないことを願っています。以下を実行すると、 のみが見つかると予想されます'a or b'
。
select * from theme
where contains(name, '{a or b}')>0;
しかし、私も得'Pdz344_1_b'
ます。しかし、ありません'a'
、'o'
ありません'r'
。このテキストが一致することは非常に驚くべきことです。contains() の構文についてわからないことはありますか?