Dataverse 検索を使用してテーブル データ全体を検索する

注意

エンティティとテーブルの違いがわかりませんか? Microsoft Dataverse で「開発者: 用語を理解する」を参照してください。

Dataverse 検索では、複数のテーブルにまたがる包括的な検索結果が、1 つのリストで関連性の高い順にすばやく表示されます。 この機能を使用する前に、管理者がターゲット環境で Dataverse 検索を有効にする必要があります。 詳細: Dataverse 検索を使用してレコードを検索する

Dataverse 検索の使用を開始するために、アプリケーションが HTTP POST 要求 (現在は Web API のみ) を発行して Dataverse 検索を開始します。 データを検索するときは、オプションのクエリ パラメーターを指定して、環境データの検索方法の基準を設定します。

Power Apps Web アプリケーション UI で使用できる Dataverse 検索方法が 3 つあります。

  • 検索: 検索結果ページを表示します。

  • 提案: ユーザーがフォーム フィールドにテキストを入力するときに提案を表示します。

  • オートコンプリート: ユーザーがフォーム フィールドにテキスト入力するときに入力のオートコンプリートを行います。

次のセクションでは、アプリケーション コードから上記の検索機能にアクセスする方法について説明します。

Dataverse 検索 HTTP 要求の最小構文は以下のとおりです。

POST [Organization URI]/api/search/v1.0/query
{  
  “search”: “<search term>”
}

search パラメーター値には、検索する用語が含まれ、100 文字の制限があります。

検索が成功すると、次のもので構成される HTTP ステータス 200 が返されます。

  • value: テーブルの一覧。 既定では 50 件の結果が返されます。 これには、応答の crmhit タグ内に含まれる検索パラメーター値との一致を示す検索ハイライトも含まれます。

  • Totalrecordcount: (タイプ long の) 結果の総数。 returntotalrecordcountfalse (既定) に設定されている場合、値 −1 が返されます。

  • ファセット: ファセットの結果。

さらに、1 つ以上のクエリ パラメーターを追加して、検索の実行方法と返される結果をカスタマイズできます。 サポートされているクエリ パラメーターについては、次のセクションで説明します。

クエリ パラメーター

次のクエリ パラメーターが Dataverse 検索でサポートされています。

entities=[list<string>] (optional)

既定のテーブル一覧は、Dataverse 検索の–構成されたテーブルと列をすべて検索します。 既定の一覧は、Dataverse 検索が有効なときに管理者が構成します。

facets=[list<string>] (optional)

ファセットは、データ結果が取得された後にデータ結果にドリルダウンする機能をサポートします。

POST [Organization URI]/api/search/v1.0/query
{  
  “search”: ”maria”,

  “facets”: ["@search.entityname,count:100",  
    "account.primarycontactid,count:100",  
    "ownerid,count:100",  
    "modifiedon,values:2019-04-27T00:00:00|2020-03-27T00:00:00|2020-04-20T00:00:00|2020-04-27T00:00:00",
    "createdon,values:2019-04-27T00:00:00|2020-03-27T00:00:00|2020-04-20T00:00:00|2020-04-27T00:00:00"]
}

filter=[string] (optional)

フィルターはデータの検索中に適用され、標準の OData 構文で指定されます。

POST [Organization URI]/api/search/v1.0/query
{  
  “search”: ”maria”,

  “filter”: "account:modifiedon ge 2020-04-27T00:00:00,
    activities: regardingobjecttypecode eq 'account', annotation:objecttypecode eq 'account',
    incident: (prioritycode eq 1 or prioritycode eq 2)"
}

returntotalrecordcount = true | false (optional)

合計レコード数を返すには、true を指定します。返さない場合は false を指定します。 既定値は false です。

skip=[int] (optional)

スキップする検索結果の数を指定します。

top=[int] (optional)

取得する検索結果の数を指定します。 既定値は 50、最大値は 100 です。

orderby=[list<string>] (optional)

コンマ区切りの句の一覧で、各句は、列名とそれに続く 'asc' (既定の昇順) または 'desc' (降順) で構成されます。 このリストは、結果を優先順に並べる方法を指定します。 既定では、結果は関連性スコア (@search.score) の降順で一覧表示されます。 スコアが同じ結果の場合、順序はランダムになります。

複数のテーブルの種類を含む結果セットの場合、orderby の句の一覧はグローバルに適用可能である必要があります (たとえば、modifiedon、createdon、@search.score)。 orderby パラメーターを指定すると、既定値が上書きされることに注意してください。 たとえば、関連性によって (優先順位の順に) ランク付けされた結果を取得し、次に上位にリストされた最新の変更されたレコードを取得するには、次のようにします。

“orderby”: [“@search.score desc", "modifiedon desc”]

クエリ要求に特定のテーブルの種類のフィルターが含まれる場合、orderby はオプションでテーブル固有の列を指定できます。

searchmode= any | all (optional)

ドキュメントを一致としてカウントするために、検索語の一部またはすべてを一致させる必要があるかどうかを指定します。 既定値は 'any' です。

注意

クエリ リクエストの searchMode パラメーターは、NOT 演算子を含む用語がクエリ内の他の用語と AND として解釈されるか OR として解釈されるかを制御します (他の用語に + または | 演算子がない場合)。

searchMode=any を使用すると、より多くの結果が含まれるため、クエリの呼び出しが増加し、デフォルトでは "OR NOT" として解釈されます。 たとえば、"wifi -luxury" は、"wifi" という用語が含まれているドキュメント、または "luxury" という用語が含まれていないドキュメントに一致します。

searchMode=all を使用すると、含まれる結果が少なくなるためクエリの精度が向上し、既定では "AND NOT" として解釈されます。 たとえば、"wifi -luxury" は、"wifi" という用語を含み、"luxury" という用語を含まないドキュメントと一致します。

searchtype= simple | full (optional)

検索タイプは、検索クエリの構文を指定します。 'simple' を使用すると、単純なクエリ構文が選択され、'full' を使用すると Lucene クエリ構文が選択されます。 既定は "simple" です。

単純なクエリ構文は、次の機能をサポートしています。

機能 説明
ブール演算子 AND 演算子、+ で示されます
OR 演算子、| で示されます
NOT 演算子、- で示されます
優先演算子 "hotel+(wifi | luxury)" という検索用語は、"hotel" という用語と "wifi" または "luxury" (あるいはその両方) のいずれかを含む結果を検索します。
ワイルドカード 末尾のワイルドカードがサポートされています。 たとえば、"Alp*" は "alpine" を検索します。
完全一致 引用符 " " で囲まれたクエリ。

Lucene クエリ構文は、次の機能をサポートしています。

機能 説明
ブール演算子 単純なクエリ構文と比較して、拡張されたセットを提供します。
AND 演算子、AND、&&、+ で示されます
OR 演算子、OR、|| で示されます
NOT 演算子、NOT、!、– で示されます
優先演算子 単純なクエリ構文と同じ機能です。
ワイルドカード 末尾のワイルドカードに加えて、先頭のワイルドカードもサポートします。
末尾のワイルドカード – "alp*"
行間のワイルドカード - “/.*pine/”
あいまい検索 最大 2 文字のスペルミスのあるクエリをサポートします。
"Uniersty~" は "University" を返します
"Blue~1" は "glue"、"blues" を返します
用語ブースト クエリ内の特定の用語の重みが異なります。
"Rock^2 electronic" は、"electronic" との一致よりも "rock" の一致の方が重要な結果を返します。
近接検索 より文脈的な結果を得るために、用語が互いに x 語以内にある結果を返します。
たとえば、“airport hotel”~5 は、"airport" と "hotel" が互いに 5 語以内の結果を返すため、空港の近くにあるホテルを見つける可能性が高くなります。
正規表現 (regex) 検索 たとえば、/[mh]otel/ は "motel" または "hotel" に一致します。

注意

ワイルドカードは、Dataverse 検索で単語を補完する場合にのみ使用されます。 原則として、先頭のワイルドカードを使用したクエリは、ワイルドカードを使用しない場合よりもかなり時間がかかるため、検索対象を見つけるための別の方法を検討し、先頭のワイルドカードを使用する場合は慎重に使用することをお勧めします。

検索テキストの一部として検索演算子のいずれかを使用するには、文字の前に 1 つの円記号 (\) を付けることで文字をエスケープします。 エスケープが必要な特殊文字には、次のものがあります: + - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

以下は、基本的な検索リクエストと応答の例です。

要求

POST [Organization URI]/api/search/v1.0/query
{  
  “search”: ”maria”,

  “facets”: ["@search.entityname,count:100",  
    "account.primarycontactid,count:100",  
    "ownerid,count:100",  
    "modifiedon,values:2019-04-27T00:00:00|2020-03-27T00:00:00|2020-04-20T00:00:00|2020-04-27T00:00:00",
    "createdon,values:2019-04-27T00:00:00|2020-03-27T00:00:00|2020-04-20T00:00:00|2020-04-27T00:00:00"]
}

回答

{
    "value": [
        {
            "@search.score": 0.4547767,
            "@search.highlights": {
                "emailaddress1": [
                    "{crmhit}maria{/crmhit}@contoso.com"
                ],
                "firstname": [
                    "{crmhit}Maria{/crmhit}"
                ],
                "fullname": [
                    "{crmhit}Maria{/crmhit} Sullivan"
                ]
            },
            "@search.entityname": "contact",
            "@search.objectid": "16ffc791-d06d-4d8c-84ad-89a8978e14f3",
            "ownerid": "bb2500d1-5e6d-4953-8389-bfedf57e3857",
            "owneridname": "Corey Gray",
            "@search.ownerid.logicalname": "systemuser",
            "@search.objecttypecode": 2,
            "fullname": "Maria Sullivan",
            "entityimage_url": **null**,
            "createdon": "10/9/2020 5:27 PM",
            "modifiedon": "10/9/2020 5:27 PM",
            "emailaddress1": "maria@contoso.com",
            "address1_city": **“Seattle”**,
            "address1_telephone1": **“206-400-0200”**,
            "parentcustomerid": **null**,
            "parentcustomeridname": **null**,
            "telephone1": **“206-400-0300”**
        }
    ],
    "facets": {
        "account.primarycontactid": [],
        "ownerid": [
            {
                "Type": "Value",
                "Value": "31ca7d4b-701c-4ea9-8714-a89a5172106e",
                "OptionalValue": "Corey Gray",
                "Count": 1
            }
        ],
        "@search.entityname": [
            {
                "Type": "Value",
                "Value": "contact",
                "Count": 1
            }
        ],
        "modifiedon": [
            {
                "Type": "Range",
                "To": "4/27/2019 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "4/27/2019 12:00 AM",
                "To": "3/27/2020 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "3/27/2020 12:00 AM",
                "To": "4/20/2020 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "4/20/2020 12:00 AM",
                "To": "4/27/2020 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "4/27/2020 12:00 AM",
                "Count": 1
            }
        ],
        "createdon": [
            {
                "Type": "Range",
                "To": "4/27/2019 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "4/27/2019 12:00 AM",
                "To": "3/27/2020 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "3/27/2020 12:00 AM",
                "To": "4/20/2020 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "4/20/2020 12:00 AM",
                "To": "4/27/2020 12:00 AM",
                "Count": 0
            },
            {
                "Type": "Range",
                "From": "4/27/2020 12:00 AM",
                "Count": 1
            }
        ]
    },
    "totalrecordcount": -1
}

候補

候補は、テーブル レコードのプライマリ列に基づいて、指定された検索パラメータ値に一致する一覧を提供します。 提案検索ではレコードのプライマリ列のみが検索され、検索リクエストでは Dataverse 検索–の有効なテーブル列全体を検索するため、通常の検索要求とは異なります。

提案検索 HTTP リクエストの最小構文は次のとおりです。

POST [Organization URI]/api/search/v1.0/suggest
{
  “search”: “<text-fragment>”
}

検索パラメーター値は、検索が一致するテキスト文字列を提供し、最小長は 3 文字です。

検索が成功すると、HTTP ステータス 200 が返され、「値」が含まれます。これは、テキストまたはドキュメントで構成されるリストであり、テキストはハイライト付きの提案であり、ドキュメントは提案結果の辞書 <string,object> です。 既定では 5 件の結果が返されます。 提案のハイライトは、検索パラメーター値との一致を示し、応答の crmhit タグ内に含まれています。

さらに、1 つ以上のクエリ パラメーターを追加して、提案検索の実行方法と返される結果をカスタマイズできます。 サポートされているクエリ パラメーターについては、次のセクションで説明します。

クエリ パラメーター

usefuzzy=true | false (optional)

あいまい検索を使用して、スペルミスを防ぎます。 既定値は false です。

top=[int] (optional)

取得する提案の数。 既定値は 5 です。

orderby=[List<string>] (optional)

コンマ区切りの句の一覧で、各句は、列名とそれに続く 'asc' (昇順) または 'desc' (降順) で構成されます。 このリストは、結果を優先順に並べる方法を指定します。 既定では、結果は関連性スコア (@search.score) の降順で一覧表示されます。 スコアが同じ結果の場合、順序はランダムになります。

複数のテーブルの種類を含む結果セットの場合、orderby の句の一覧はグローバルに適用可能である必要があります (たとえば、modifiedon、createdon、@search.score)。 orderby パラメーターを指定すると、既定値が上書きされることに注意してください。 たとえば、関連性によって (優先順位の順に) ランク付けされた結果を取得し、次に上位にリストされた最新の変更されたレコードを取得するには、次のようにします。

“orderby”: [“@search.score desc", "modifiedon desc”]

クエリ要求に特定のテーブルの種類のフィルターが含まれる場合、orderby はオプションでテーブル固有の列を指定できます。

entities=[list<string>] (optional)

既定では、Dataverse 検索–の構成済みテーブル全体を検索します。

filter=[string] (optional)

フィルターはデータの検索中に適用され、標準の OData 構文で指定されます。

要求

POST [Organization URI]/api/search/v1.0/suggest
{  
  “search”: ”mar”,

  “filter”: "account:modifiedon ge 2020-04-27T00:00:00,
    activities:regardingobjecttypecode eq 'account', annotation:objecttypecode eq 'account'"
}

以下は、基本的な提案検索リクエストの例です。

要求

POST [Organization URI]/api/search/v1.0/suggest
{  
  “search”: ”mar”
}

回答

{
    "value": [
        {
            "text": "{crmhit}Mar{/crmhit}ia Sullivan",
            "document": {
                "@search.objectid": "52a33850-8f0a-eb11-a813-000d3a8ab142",
                "@search.entityname": "contact",
                "@search.objecttypecode": 2,
                "fullname": "Maria Sullivan",
                "entityimage_url": **null**,
                "emailaddress1": "maria@contoso.com",
                "address1_city": **null**,
                "address1_telephone1": **null**,
                "parentcustomerid": **null**,
                "parentcustomeridname": **null**,
                "telephone1": **null**
            }
        }
    ]
}

オートコンプリート

ユーザー入力のオートコンプリートを提供します。 オートコンプリートは、テーブル レコードのプライマリ列に基づいています。

Dataverse 検索 HTTP 要求の最小構文は以下のとおりです。

POST [Organization URI]/api/search/v1.0/autocomplete
{  
  “search”: ”<text-fragment>”
}

検索が成功すると、HTTP ステータス 200 が返されます。これは文字列である「値」で構成されます。

さらに、1 つ以上のクエリ パラメーターを追加して、検索の実行方法と返される結果をカスタマイズできます。 サポートされているクエリ パラメーターについては、次のセクションで説明します。

クエリ パラメーター

usefuzzy=true | false (optional)

あいまい検索はスペルミスを防ぐのに役立ちます。 既定値は false です。

entities=[list<string>] (optional)

既定のスコープは、Dataverse 検索の–構成されたテーブルと列をすべて検索しています。

filter=[string] (optional)

フィルターはデータの検索中に適用され、標準の OData 構文で指定されます。

要求

POST [Organization URI]/api/search/v1.0/autocomplete
{  
  “search”: ”mar”,

  “filter”: "account:modifiedon ge 2020-04-27T00:00:00,
    activities:regardingobjecttypecode eq 'account', annotation:objecttypecode eq 'account'"
}

以下は、基本的なオートコンプリート リクエストの例です。

要求

POST [Organization URI]/api/search/v1.0/autocomplete
{  
  “search”: ”mar”
}

回答

{
  "value": "{crmhit}maria{/crmhit}"
}

関連項目

Dataverse 検索を構成して検索結果とパフォーマンスを向上させる
Microsoft Dataverse の検索オプションの比較
クエリで関連テーブル レコードを取得
Web API を使用したクエリ データ
ご利用の Dataverse 環境に接続する