0

2 つのテーブルがあり、テーブルの 1 つで値が見つかり、2 番目のテーブルで値が見つかる一致を見つけたいと考えています。

テーブル AI には、ユーザーによる検索クエリのリストがあり、テーブル BI には、見つけたい検索クエリの選択のリストがあります。これを機能させるには、次のような方法を使用します。

SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('shackleford', 'shackelford') FROM DUAL

この方法を使用しましたが、クエリと選択中の名前の違いになる可能性があるため、機能しません。

SELECT query FROM search_log WHERE query IN (SELECT navn FROM selection_table);

クエリを介して類似点を見つけるためのベスト プラクティスの方法はありますか?

4

1 に答える 1

2

1 つのアプローチは次のようなものです。

SELECT 
    SEARCH_LOG.QUERY
FROM 
    SEARCH_LOG
WHERE 
    EXISTS
    (
        SELECT 
            NULL 
        FROM 
            SELECTION_TABLE
        WHERE
            UTL_MATCH.JARO_WINKLER_SIMILARITY(SEARCH_LOG.QUERY, SELECTION_TABLE.NAVN) >= 98
    );

これにより、少なくとも 98 (100 点満点) のスコアと一致SEARCH_LOGする行を含む の行SELECTION_TABLEが返されます。98 を任意のしきい値に変更できます。NAVNQUERY

これは、すべての行の組み合わせを調べる可能性があるため、「ブルート フォース」アプローチです。したがって、「ベスト プラクティス」ではないかもしれませんが、それでも実用的である可能性があります。パフォーマンスが重要な場合は、Oracle Text などのより高度なソリューションを検討できます。

于 2013-04-10T13:53:24.940 に答える