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() の構文についてわからないことはありますか?