sql >> データベース >  >> RDS >> Sqlserver

SQLServer全文検索を使用して製品分析を実行する方法を学びます。パート2

    この記事は、基本的な製品分析の実行方法を説明した最初の部分とは対照的に、全文検索を使用したもう少し複雑な製品分析に専念しています。

    ここでは、読者はフルテキストクエリを使用して、販売の観点から製品分析の包括的な例をいくつか実装します。

    この記事では、製品分析を実行する際に分析関数とともに使用した場合のフルテキストクエリの強みを明らかにします。

    前提条件

    製品分析の例の実装を開始する前に、この記事の前提条件を確認することをお勧めします。

    パート1.必需品

    SQLServer全文検索を使用して製品分析を実行する方法を学習したことを前提としています。パート1 また、最初の部分で説明した例を使用して、基本的な製品分析を実行する機能があります。

    T-SQLと全文検索の理解

    この記事を読みやすくするために、読者にはT-SQLスクリプトと全文検索について十分に理解しておくことをお勧めします。

    上級ユーザー向けのSQLServer2016での全文検索の実装を参照して、全文検索の基本に精通している場合は、全文検索の高度なレベルを理解してください。それでも、フルテキスト検索の高度な使用に進む前に基本的な理解を深める必要がある場合は、初心者向けにSQLServer2016でのフルテキスト検索の実装の記事を読むことをお勧めします。

    全文検索がインストールされています

    記事を読み進めるには、SQLインスタンスに全文検索がインストールされていることを確認してください。

    次の手順に従って、SQLサーバーに全文検索をインストールします。

    1. SQLインストーラーを実行します。
    2. セットアップファイルを実行します。
    3. 機能として追加します。
    4. 現在のサーバーを選択してください。
    5. 追加するインスタンス機能を選択します。

    記事初心者向けのSQLServer2016での全文検索の実装も参照できます。 上記の手順の詳細情報を入手するには。

    サンプルデータベース(CarPlus)

    サンプルデータベースをまだ設定していない場合は、最初の部分の手順に従う必要があります。 CarPlusを設定する必要があることに注意してください この記事の例を実装するためのサンプルデータベース

    フルテキストカタログとフルテキストインデックス

    また、FeaturesLiked列でフルテキストカタログとフルテキストインデックスを定義することを期待しています。

    SQLServer全文検索を使用して製品分析を実行する方法を学ぶ」を参照してください。パート1 すでに完了していない限り、上記の手順を実行します。

    分析1:センサーの全文検索

    車に付属しているすぐに使えるセンサーがいくつかあったとしましょう。現在、経営陣は次のことを知りたがっています。

    1. 車を購入した顧客は、箱から出してすぐに使えるセンサーと同じように使用しましたか?
    2. どのようなセンサーが好きでしたか?
    3. 特定のタイプのセンサーはいくつ好きでしたか?
    4. 顧客が気に入ったさまざまなセンサーをすべて比較できますか?

    全文検索を使用すると、これらすべての質問に対する回答を見つけることができます。

    顧客が好むセンサーの検索

    顧客が注文時に車のセンサーのいずれかを気に入ったかどうかを知るには、次のように全文クエリを実行する必要があります。

    --View Orders where customers liked Sensors
    SELECT
    CarOrderId
    ,FeaturesLiked
    FROM dbo.CarOrder
    WHERE CONTAINS(FeaturesLiked, 'Sensor')

    次に、次の結果が表示されます。

    1つ確かなことは、顧客が車を購入したときに、箱から出してすぐに使えるセンサーが好きだったことです。これは、センサーの全文検索で多数の結果が返されたためです。

    検索の結果、顧客が気に入ったセンサーは少なくとも2種類あることがわかりました。

    1. タッチセンサー
    2. リバースパーキングセンサー

    顧客は少なくとも上記のタイプのセンサーを気に入ったと言っても過言ではありません。

    顧客が好むすべてのパーキングセンサーを検索する

    次に、全文検索を使用して、すべてのタイプのパーキングセンサーを検索する必要があります。 お客様が気に入ったこと。

    これは、NEARを次の検索用語(次のように)とともに使用することで見つけることができます。

    --View Orders where customers liked parking sensors
    SELECT
    FeaturesLiked
    FROM dbo.CarOrder
    WHERE CONTAINS(FeaturesLiked, 'Sensor NEAR Parking')

    出力は次のとおりです。

    その結果、お客様がパーキングセンサーを気に入ったケースは7つあるようです。 。ただし、より多くの情報を入手するには、さらに深く掘り下げる必要があります。

    顧客が好むパーキングセンサー以外のセンサーの検索

    ここで、話の裏側、つまり、パーキングセンサー以外のセンサーを気に入った顧客を見つけたいと思います。 。

    次のフルテキストクエリを使用して、パーキングセンサー以外の顧客が気に入ったセンサーを検索します :

    --View Orders where customers liked other than parking sensors
    SELECT 
    CarOrderId
    ,FeaturesLiked 
    FROM dbo.CarOrder 
    WHERE CONTAINS(FeaturesLiked,'Sensor AND NOT Parking')

    上記のフルテキストクエリの結果は次のとおりです。

    パーキングセンサーとは別に、 顧客はタッチセンサーが好きでした 。

    パーキングセンサーとタッチセンサーおよび他のセンサーとの比較

    次の大きなことは、パーキングセンサーを比較できるかどうかを確認することです。 タッチセンサーを使用 顧客が車を購入するために注文したときに気に入った他のタイプのセンサーを使用します。

    また、比較をより面白くするために、今シーズンの注文の総数を知る必要があります。

    ただし、これだけでは不十分です。また、センサー間の類似性のパーセンテージを理解する必要があります。

    これは、次のように変数とT-SQL集計を使用したフルテキストクエリを使用して見つけることができます。

    DECLARE @TotalParkingSensorLikes INT
    DECLARE @TotalTouchSensorLikes INT
    DECLARE @TotalOtherSensorLikes INT
     
     
    DECLARE @TotalOrders INT
     
     
    SET @TotalOrders=(SELECT COUNT(*) FROM dbo.CarOrder)
    SET @TotalParkingSensorLikes=(SELECT COUNT(*) FROM dbo.CarOrder WHERE CONTAINS(FeaturesLiked,'Sensor NEAR Parking'))
    SET @TotalTouchSensorLikes=(SELECT COUNT(*) FROM dbo.CarOrder WHERE CONTAINS(FeaturesLiked,'Sensor NEAR Touch'))
    SET @TotalOtherSensorLikes=(SELECT COUNT(*) FROM dbo.CarOrder WHERE CONTAINS(FeaturesLiked,'Sensor AND NOT Touch AND NOT Parking'))
     
      
    -- Total parking sensors likes vs touch sensors
    SELECT @TotalOrders AS TotalOrders,@TotalTouchSensorLikes AS Total_Parking_Sensor_Likes,
    (@TotalTouchSensorLikes*100/@TotalOrders) AS PercentLikes,
    @TotalParkingSensorLikes AS Total_Touch_Sensor_Likes,
    (@TotalParkingSensorLikes*100/@TotalOrders) AS PercentLikes,
    @TotalOtherSensorLikes AS Total_Other_Sensor_Likes,
    (@TotalOtherSensorLikes*100/@TotalOrders) AS PercentLikes

    出力は次のように表示されます。

    分析結果の要約

    顧客は車のタッチセンサーを好んだと結論付けることができます リバースパーキングセンサーの機能 特徴。しかし、顧客が気に入ったセンサーはそれらだけでした。そして、彼らが最も気に入った機能であるタッチセンサーは、彼らが気に入ったすべての機能の23%しか使用していません。

    分析2:運転支援とアラートの全文検索

    今シーズン中に自動車製造会社がいくつかのアラートを含むいくつかの運転支援機能を導入したと仮定すると。

    ビジネスは次のことを知りたいと思っています:

    1. 顧客はどのような種類の運転アラートと支援機能を気に入っていましたか?
    2. アラートとアシスタンス機能の組み合わせを気に入った顧客は何人いますか?
    3. アラートとアシスタンス機能の両方を気に入った顧客の年齢ベースの分析を実行できますか?

    顧客が好む運転アラートと支援機能の検索

    フルテキストクエリを使用して、顧客が好む運転アラートや支援機能を検索できますが、「検出」という単語に注意する必要があります。 「アラート」の代わりに使用することもできます 次のように:

    --Searching driving alerts and assistance features liked by customers
    SELECT
    CarOrderId
    ,FeaturesLiked
    FROM dbo.CarOrder
    WHERE CONTAINS(FeaturesLiked,'FORMSOF(INFLECTIONAL,Assisting) OR FORMSOF(INFLECTIONAL,Alerts)
    OR FORMSOF(INFLECTIONAL,Detect)
    ')

    上記のフルテキストクエリの結果は次のとおりです。

    そのため、フルテキストクエリを使用して、顧客が好む機能とアラートの種類に関する最初のビジネス上の質問に対する答えを見つけました。

    したがって、顧客は次のタイプの運転アラートと支援機能を気に入っていると結論付けることができます。

    1. レーン変更アラート
    2. ヒルアシスト
    3. 衝突検出
    4. タイヤ空気圧アラート

    すべての運転アラートと支援機能が好きな顧客を検索する

    もう少し複雑な質問は、運転支援機能とアラートをすべて気に入った顧客の数を見つけることです。これには、次のように全文クエリで回答できます。

    --Searching order where both alerts and driving assistance features are liked by customers
    SELECT
    CarOrderId
    ,FeaturesLiked
    FROM dbo.CarOrder
    WHERE CONTAINS(FeaturesLiked,'FORMSOF(INFLECTIONAL,Assisting) AND (FORMSOF(INFLECTIONAL,Alerts) OR FORMSOF(INFLECTIONAL,DETECT)
    )')

    出力は次のとおりです。

    したがって、顧客が運転支援機能とアラートの両方を気に入った注文は4つあります。

    運転支援とアラート機能を気に入った顧客の年齢ベースの分析

    より多くの情報を得るために、私たちは、年齢に基づいて顧客が好んだ運転支援機能とアラートを理解しようとします。

    次のように、フルテキストクエリとT-SQLで提供される分析関数を組み合わせてこれを実行することもできます。

    -- Age based analysis of customers liking all driving alerts and assistance features
    SELECT DISTINCT(CustomerAge),TotalOrders=COUNT(*) OVER (Partition BY CustomerAge),
    FIRST_VALUE(CustomerAge) OVER (Order by CustomerAge) as YoungestCustomer,
    LAG(CustomerAge,1,0) OVER (ORDER BY CustomerAge) as YoungerCustomerOrSameAge,
    LEAD(CustomerAge,1,0) OVER (ORDER BY CustomerAge) as OlderCustomerOrSameAge,
    FeaturesLiked as Driving_Assistance_or_Alerts_Features
    FROM dbo.CarOrder
    WHERE CONTAINS(FeaturesLiked,'FORMSOF(INFLECTIONAL,Assisting) OR FORMSOF(INFLECTIONAL,Alerts)
    OR FORMSOF(INFLECTIONAL,Detect)')
    ORDER BY TotalOrders DESC

    出力は次のとおりです。

    T-SQLで分析関数を使用する方法の詳細については、「SQLでデータを単純な集計からスライドする集計に集約する方法」の記事を参照してください。

    分析結果の要約

    全文検索を使用した上記の分析に照らして、顧客が好んだ運転支援および運転警報機能は、主に35歳の年齢層に属していることは明らかです。

    したがって、35歳の顧客はこれらの機能を最も気に入っていましたが、これらの機能を気に入った最年少の顧客は18歳です。

    これらの機能を気に入った最年長の顧客は52歳です。

    上記の分析から、18歳から52歳までのほとんどの顧客が運転支援と運転警報機能を楽しんでいたことが推測できます。これらの機能を他の顧客よりも気に入っている顧客は35歳です。

    おめでとうございます。全文検索を使用して少し複雑な製品分析を実行する方法を正常に学習しました。

    やるべきこと

    全文検索で商品分析を行えるようになったので、次のことを試してみることをお勧めします。

    1. センサーと運転支援機能の両方を気に入っているが、車を購入したときのアラートは気に入っていない顧客を見つけて、相関情報を取得してみてください。
    2. この記事を念頭に置いて、アラートは気に入ったが運転支援機能は気に入っていない顧客を検索してください。
    3. 運転支援およびアラート機能のために実行したものと同様のセンサーについて、顧客の年齢ベースの分析を実行してみてください。

    1. SQLiteで文字列をトリミングする方法

    2. to_timestamp()がPostgreSQLでどのように機能するか

    3. PostgreSQLのチェック制約を理解する

    4. PostgreSQLの関数名は大文字と小文字を区別しませんか?