0

現在、2 つのレコード間の類似性を計算する方法を見つけようとしています。私の最初のレコードは、非アクティブ化された広告からのものです。そのため、たとえば、いくつかの VARCHAR フィールドの同等性に関して最も類似した 10 個の広告を見つけたいと考えています。

私が理解できないことは、MySQL関数があれば、それが何らかの形で私を助けることができるかどうか、または文字列を奇妙な方法で比較する必要があるかどうかです。

編集#1

類似性は、次のフィールドによって定義されます。

  • タイトル (重量: 50 %)

  • 含有量(重量:40%)

  • カテゴリ (重量: 10 %)

編集#2

私は計算を次のようにしたい:

タイトル: タイトル フィールドに一致する単語 (2 文字を超える単語のみが一致します)。

説明: タイトル フィールドに一致する単語 (2 文字を超える単語のみが一致します)。

カテゴリ: カテゴリに一致し、それが一致しない場合は、重みの少ない親カテゴリに一致します:)

これの方程式は次のようになります。

#1 は古い非アクティブな投稿、#2 はアクティブな投稿です。

#2 のタイトルは、#2 の合計 10 語のうち 3 語で #1 のタイトルと一致します。これにより、30% 一致 = 30 ポイントが得られます。

#2 の説明は、#2 の合計 400 語のうち 10 語で #1 の説明と一致します。これにより、4 % 一致 = 4 ポイントが得られます。

#2 のカテゴリは #1 のカテゴリと一致しないため、一致率は 0% です。それは0ポイントを与えます。

その場合、合計は #2 の 34 ポイントになります。:)

編集 #3

これが私のクエリですが、異なる行は返されませんが、多くの同じ行が返されます。

SELECT
            a.AdvertisementID as A_AdvertisementID,
            IF(a.Topic LIKE a2.Topic, 50, 0) + IF(a.Description LIKE a2.Description, 40, 0) + IF(a.Cate_CategoryID LIKE a2.Cate_CategoryID, 10, 0) as A_Score,
            a.AdvertisementID as A_AdvertisementID,
            a.Topic as A_Topic,
            LEFT(a.Description, 300) as A_Description,
            a.Price as A_Price,
            a.Type as A_Type
        FROM
            ".DB_PREFIX."A_Advertisements a2,
            ".DB_PREFIX."A_Advertisements a
        WHERE
            a2.AdvertisementID <> a.AdvertisementID
            AND
            a.AdvertisementID = :a_id
        ORDER BY
            A_Score DESC
4

1 に答える 1