2

私のテーブルで次のエントリを検討してください。

  • 赤いリンゴ
  • 黄色いリンゴ
  • アップルグリーン_
  • レッド・ア・プル
  • アペルイエロー_

何人かの人々は、一貫性のない表記法 ('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スペルが正しかったすべてのエントリのみを取得します。

  • 赤いリンゴ
  • 黄色いリンゴ
  • アップルグリーン_

1 つのクエリでLIKECONTAINSの両方の演算子を組み合わせることができないのはなぜですか?

私は見つける必要があります:

  • apple他の単語で囲まれているエントリ(私の場合は色)
  • のすべての形式apple(つづりに関係なく)
4

3 に答える 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

このクエリは基本的に、contains 句からの検索結果をあいまい検索と通常の検索で結合します。クエリのパート II を like に置き換えることもできます。

于 2016-06-17T21:50:14.850 に答える
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%'
    )
于 2015-10-30T10:24:53.493 に答える