エイリアス管理

コレクションエイリアスは、Solrが通常のコレクションと同じように扱う仮想コレクションです。エイリアスコレクションは、1つ以上の実際のコレクションを指す場合があります。

コレクションエイリアスのいくつかのユースケース

  • 時系列データ

  • バックグラウンドでのコンテンツの再インデックス

Solrのエイリアスの概要については、エイリアスのセクションを参照してください。

CREATEALIAS:コレクションのエイリアスの作成または変更

CREATEALIASアクションは、1つ以上のコレクションを指す新しいエイリアスを作成します。エイリアスには、標準とルーティングの2種類があります。

標準エイリアスはシンプルです。CREATEALIASは、コマンドで提供された1つ以上のコレクションの名前でエイリアス名を登録します。既存のエイリアスが存在する場合は、置き換え/更新されます。

標準エイリアスは、コレクションの名前を変更する手段として機能し、さまざまな目的でどのバック/基盤コレクションが「ライブ」であるかをアトミックに切り替えるために使用できます。

Solrが複数のコレクションを指すエイリアスを検索すると、Solrはすべてのコレクションのすべてのシャードをまとめて検索します。複数のコレクションにまたがるエイリアスに更新を送信することはできますが、標準エイリアスには、参照されているコレクション間でドキュメントを分散するロジックがないため、すべての更新はリストの最初のコレクションに送られます。

/admin/collections?action=CREATEALIAS&name=name&collections=collectionlist

ルーティングエイリアスは、更新を正しいコレクションにルーティングする一種のスーパーコレクションとして機能する追加機能を持つエイリアスです。

ルーティングはデータ駆動型であり、時間フィールドまたはフィールドで指定されたカテゴリ(通常は文字列ベース)に基づいている場合があります。開始する前に、ルーティングされたエイリアスの重要な概要情報を参照してください。

$ https://127.0.0.1:8983/solr/admin/collections?action=CREATEALIAS&name=timedata&router.start=NOW/DAY&router.field=evt_dt&router.name=time&router.interval=%2B1DAY&router.maxFutureMs=3600000&create-collection.collection.configName=myConfig&create-collection.numShards=2

2018年1月15日に実行すると、上記はtimedataという名前の時間ルーティングエイリアスを作成します。これには、名前がtimedataで始まるコレクションと、timedata_2018_01_15という名前の初期コレクションがすぐに作成されます。evt_dtに(必須の)値を含むこのエイリアスに送信された更新で、2018-01-15より前または後のものは、2018-01-15の最後の60分まで拒否されます。2018-01-15T23:00:00以降は、2018-01-15または2018-01-16のいずれかのドキュメントが受け入れられます。システムがコレクションが存在しない許可時間ウィンドウのドキュメントを受信するとすぐに、次に必要なコレクション(およびrouter.intervalrouter.maxFutureMsよりも小さい場合は、介在するコレクションも)が自動的に作成されます。初期コレクションと後続のコレクションは両方とも、指定されたconfigsetを使用して作成されます。name以外のすべてのコレクション作成パラメータは、create-collection.をプレフィックスとして付けることで許可されます。

これは、たとえば、コレクションを日単位で分割し、各日次コレクション内で顧客IDに基づいてデータをシャードにルーティングできることを意味します。このようなシャードは、任意のタイプ(NRT、PULL、またはTLOG)にすることができ、ルールベースのレプリカ配置戦略を使用することもできます。

コレクション作成のためにこのコマンドで提供された値は、エイリアスプロパティに保持され、ZooKeeperのaliases.jsonを検査することで確認できます。

更新のみがルーティングされ、クエリはエイリアス内のすべてのコレクションに分散されます。

CREATEALIASパラメーター

name

必須

デフォルト:なし

作成するエイリアス名。エイリアスがルーティングされる場合、作成される依存コレクションの名前のプレフィックスとしても機能します。したがって、コレクションの命名に関する通常の要件に従う必要があります。

async

オプション

デフォルト:なし

このアクションを追跡するためのリクエストID。これは非同期的に処理されます

標準エイリアスパラメータ

collections

オプション

デフォルト:なし

エイリアス化するコレクションのカンマ区切りリスト。コレクションはクラスターにすでに存在している必要があります。このパラメータは、標準エイリアスの作成を意味します。存在する場合、すべてのルーティングパラメータは禁止されます。ルーティングパラメータが存在する場合、このパラメータは禁止されます。

ルーテッドエイリアスパラメータ

ほとんどのルーテッドエイリアスパラメータは、エイリアスプロパティになり、後で同じ名前で新しいCREATEALIASを発行するか、ALIASPROPを介して検査および変更できます。CREATEALIASは、多くの(すべてではない)不正な値に対して検証しますが、ALIASPROPは指定されたキーまたは値を盲目的に受け入れます。CREATEALIASで許可されている一部の「有効な」変更は、依然として賢明ではない可能性があります。以下の注記を参照してください。「エキスパート専用」の変更は技術的には可能ですが、コードの動作を十分に理解する必要があり、いくつかの事前操作が必要になる場合があります。

ルーテッドエイリアスは現在、最大2つのルーティング「ディメンション」をサポートしており、各ディメンションは「時間」ベースまたは「カテゴリ」ベースです。各ディメンションは、そのタイプに基づいて異なる数のパラメータを受け取ります。

v1リクエストでは、ルーティングディメンションパラメータはクエリパラメータプレフィックスによってグループ化されます。1つのディメンションのみを持つルーテッドエイリアスは、パラメータにrouter.プレフィックスを使用します(例:router.field)。2次元のルーテッドエイリアスは、このクエリパラメータプレフィックスに番号を追加して、パラメータがどのルーティングディメンションに属しているかを区別します(例:router.0.namerouter.1.field)。

v2リクエストでは、ルーティングディメンションはリスト内の個々のオブジェクトとして指定されます(例:[{"type": "category", "field": "manu_id_s"}])。

router.name (v1), type (v2)

必須

デフォルト:なし

変更:作成後は変更しないでください

使用するルーティングのタイプ。現在、timecategoryDimensional[]のみが有効です。v2リクエストでは、ディメンション情報がv2リクエストに固有のroutersリストにあるため、timeまたはcategoryのみが許可されます(ただし、ディメンションの順序に関する以下の注意点も適用されます)。

多次元ルーテッドエイリアス(別名「DRA」)の場合、ディメンション配列に表示される順序と同じ順序ですべてのディメンションを表現する必要があります。DRAのrouter.nameの形式はDimensional[dim1,dim2]です。ここで、dim1dim2は各サブディメンションの有効なrouter.nameの値です。DRAは実験的であり、現在2D DRAのみがサポートされていることに注意してください。将来、より多くの数のディメンションがサポートされる可能性があります。クラスター内のコレクション数の爆発を避けるには、ディメンショナルルーティングの慎重な設計が必要です。Solr Cloudは、1000を超えるコレクションの管理が困難な場合があります。個々のディメンションを構成する方法の詳細については、以下の例を参照してください。

router.field (v1), field (v2)

必須

デフォルト:なし

変更:作成後は変更しないでください

受信ドキュメントをどの基になるコレクションにルーティングする必要があるかを判断するために検査するフィールド。このフィールドは、すべての受信ドキュメントで必須です。

create-collection.*

オプション

デフォルト:なし

変更:はい、新しいコレクションのみが影響を受けます。注意して使用してください。

*ワイルドカードは、nameを除くCREATEコマンドの任意のパラメータに置き換えることができます。他のすべてのフィールドは、要件と命名規則が同じですが、configsetを明示的に指定する必要があります。configsetは、アップロードまたはコピーと変更のいずれかで事前に作成する必要があります。「データ駆動型」モードを使用することは、スキーマの変更が同時に発生してエラーが発生する可能性があるため、おそらく悪い考えです。

v2リクエストでは、create-collectionは提供されたすべてのコレクション作成パラメータを含むJSONオブジェクトを受け取ります(例:"create-collection": { "numShards": 3, "config": "_default"})。

時間ルーテッドエイリアスパラメータ

router.start (v2), start (v2)

必須

デフォルト:なし

変更:エキスパート専用

この時間ルーテッドエイリアスのデータの開始日時。Solrの標準の日時形式(つまり、ISO-8601または「NOW」で、オプションで日付計算を使用)で指定します。

エイリアス用に作成された最初のコレクションは、この値に基づいて内部的に命名されます。ドキュメントがrouter.fieldの以前の値で送信された場合、エイリアスがポイントする最も古いコレクションはエラーを生成します。これはルーティングできないためです。この日/時は、0以外のミリ秒コンポーネントを含めることはできません。特に、これはNOWが1000回中999回失敗することを意味しますが、NOW/SECONDNOW/MINUTEなどは正常に機能します。

TZ (v1), tz (v2)

オプション

デフォルト: UTC

変更:エキスパート専用

router.startまたはrouter.intervalで日付計算を評価するときに使用するタイムゾーン。これは検索クエリに提供される同じパラメータと同等ですが、この場合は他のほとんどのパラメータとともにエイリアスプロパティとして永続化されることを理解してください。

この値にGMT-4が指定されている場合、2018-01-14T21:00:00:01.2345Zの日付のドキュメントは、myAlias_2018-01-15_01コレクションに保存されます(+1HOURの間隔を想定)。

router.interval (v1), interval (v2)

必須

デフォルト:なし

変更:はい

シリーズ内の次のコレクションを決定するためにタイムスタンプに追加される日付計算式。2018-01-15T16:17:18の形式のタイムスタンプに追加された場合に評価できる日付計算式は、ここで機能します。

router.maxFutureMs (v1), maxFutureMs (v2)

オプション

デフォルト: 600000ミリ秒

変更:はい

エラーなしで受け入れられるように、ドキュメントがrouter.fieldで持つことを許可される未来の最大ミリ秒数。制限がない場合、誤った値によって多くのコレクションが作成される可能性があります。

router.preemptiveCreateMath (v1), preemptiveCreateMath (v2)

オプション

デフォルト:なし

変更:はい

新しいコレクションの早期作成につながる日付計算式。

ドキュメントが、最新のコレクションの終了時間からこの間隔を引いた後のタイムスタンプで到着した場合、次の(および次ののみ)コレクションが非同期的に作成されます。

この設定がない場合、コレクションはドキュメントのタイムスタンプで必要なときに同期的に作成されるため、コレクションが作成されるまでドキュメントの流れがブロックされます(数秒かかる場合があります)。先制的な作成は、これらの問題を軽減します。十分な時間(おそらく1時間以上)に設定すると、コレクションの作成に問題がある場合に、この時間枠は是正措置を講じるのに十分な時間となる可能性があります。ただし、先制的な作成が成功した後、コレクションは使用されていないにもかかわらずリソースを消費しており、新しいドキュメントは別の場所にルーティングされるだけである傾向があります。

また、router.autoDeleteAgeは現在、新しく作成されたコレクションの日付を基準に評価されるため、最も古いコレクションが早く削除されないように、削除期間を先制ウィンドウの量だけ増やすことをお勧めします。

指定された間隔を日付から減算できる必要があります。したがって、マイナス記号を先頭に付けると無効な日付計算が作成される場合は、エラーが発生します。また、存在しないコレクションに送られるドキュメントは、その宛先コレクションまでの同期作成を引き続きトリガーしますが、追加の非同期的な先制作成はトリガーしないことに注意してください。ドキュメントごとに1種類のコレクション作成しか発生できません。例:90MINUTES

このプロパティはデフォルトでは空であり、新しいコレクションのジャストインタイム同期作成を示します。

router.autoDeleteAge (v1), autoDeleteAge (v2)

オプション

デフォルト:なし

変更:はい、データ損失の可能性あり、注意して使用してください!

最も古いコレクションが自動的に削除される日付計算式。

日付計算は、新しく作成されたコレクションのタイムスタンプ(通常は現在時刻に近い)を基準にしているため、これは丸めや減算によって以前の時間を生成する必要があります。削除されるコレクションには、計算された期間よりも完全に前の時間範囲が必要です。コレクションは、新しいコレクションが作成される直前に削除対象と見なされます。例:/DAY-90DAYS

デフォルトでは削除されません。

カテゴリルーテッドエイリアスパラメータ

router.maxCardinality (v1), maxCardinality (v2)

オプション

デフォルト:なし

変更:はい

このエイリアスで許可されるカテゴリの最大数。この設定は、不良データが発生した場合に無限の数のコレクションが誤って作成されるのを防ぎます。

router.mustMatch (v1), mustMatch (v2)

オプション

デフォルト:なし

変更:はい

対応するコレクションが作成される前に、router.fieldで指定されたフィールドの値が一致する必要がある正規表現。データが追加された後にこの設定を変更しても、すでにインデックス付けされているデータは変更されません。

有効なJava正規表現パターンを指定できます。この式は各リクエストの開始時に事前にコンパイルされるため、更新のバッチ処理を強くお勧めします。過度に複雑なパターンは、正規表現のJVMの実装によって決定されるように、インデックス作成中にCPUまたはガベージコレクションのオーバーヘッドを生成します。

ディメンショナルルーテッドエイリアスパラメータ

router.#. (v1)

オプション

デフォルト:なし

変更:上記に準拠

多次元エイリアスで、パラメータを特定のディメンショナルに関連付けるためにv1リクエストパラメータで使用されるプレフィックス。

たとえば、Dimensional[time,category]エイリアスでは、router.0.startを使用して時間ディメンションの開始時間を設定します。

CREATEALIAS応答

出力は、リクエストの処理にかかった時間の詳細を含むresponseHeaderになります。エイリアスの作成を確認するには、Solr Admin UIの[Cloud]セクションでaliases.jsonファイルを確認してください。ルーテッドエイリアスの初期コレクションも、管理UIのさまざまな部分に表示されるはずです。

CREATEALIASの使用例

「testalias」という名前のエイリアスを作成し、「foo」と「bar」という名前のコレクションにリンクします。

V1 API

入力

https://127.0.0.1:8983/solr/admin/collections?action=CREATEALIAS&name=testalias&collections=foo,bar&wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">122</int>
  </lst>
</response>

V2 API 入力

curl -X POST https://127.0.0.1:8983/api/aliases -H 'Content-Type: application/json' -d '
  {
    "name":"testalias",
    "collections":["foo","bar"]
  }
'

出力

{
  "responseHeader": {
    "status": 0,
    "QTime": 125
  }
}

多くの追加のコレクション作成オプションを使用してTRAを作成する、やや作為的な例を示します。

V1 API

入力

https://127.0.0.1:8983/solr/admin/collections?action=CREATEALIAS
    &name=somethingTemporalThisWayComes
    &router.name=time
    &router.start=NOW/MINUTE
    &router.field=evt_dt
    &router.interval=%2B2HOUR
    &router.maxFutureMs=14400000
    &create-collection.collection.configName=_default
    &create-collection.router.name=implicit
    &create-collection.router.field=foo_s
    &create-collection.numShards=3
    &create-collection.shards=foo,bar,baz
    &create-collection.tlogReplicas=1
    &create-collection.pullReplicas=1
    &create-collection.property.foobar=bazbam
    &wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1234</int>
  </lst>
</response>

V2 API

入力

curl -X POST https://127.0.0.1:8983/api/aliases -H 'Content-Type: application/json' -d '
  {
      "name": "somethingTemporalThisWayComes",
      "routers" : [
        {
          "type": "time",
          "field": "evt_dt",
          "start":"NOW/MINUTE",
          "interval":"+2HOUR",
          "maxFutureMs":"14400000"
        }
      ]
      "create-collection" : {
        "config":"_default",
        "router": {
          "name":"implicit",
          "field":"foo_s"
        },
        "shardNames": ["foo", "bar", "baz"],
        "numShards": 3,
        "tlogReplicas":1,
        "pullReplicas":1,
        "properties" : {
          "foobar":"bazbam"
        }
     }
  }
'

出力

{
    "responseHeader": {
        "status": 0,
        "QTime": 1234
    }
}

別の例、今回は個々のディメンションのパラメータを指定する方法を示すディメンショナルルーテッドエイリアスの例

V1 API

入力

https://127.0.0.1:8983/solr/admin/collections?action=CREATEALIAS
    &name=dra_test1
    &router.name=Dimensional[time,category]
    &router.0.start=2019-01-01T00:00:00Z
    &router.0.field=myDate_tdt
    &router.0.interval=%2B1MONTH
    &router.0.maxFutureMs=600000
    &create-collection.collection.configName=_default
    &create-collection.numShards=2
    &router.1.maxCardinality=20
    &router.1.field=myCategory_s
    &wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1234</int>
  </lst>
</response>

V2 API

入力

curl -X POST https://127.0.0.1:8983/api/aliases -H 'Content-Type: application/json' -d '
  {
    "name":"dra_test1",
    "routers": [
      {
        "type": "time",
        "field":"myDate_tdt",
        "start":"2019-01-01T00:00:00Z",
        "interval":"+1MONTH",
        "maxFutureMs":600000
      },
      {
        "type": "category",
        "field":"myCategory_s",
        "maxCardinality":20
      }
    ]
    "create-collection": {
      "config":"_default",
      "numShards":2
    }
  }
'

出力

{
    "responseHeader": {
        "status": 0,
        "QTime": 1234
    }
}

LISTALIASES: クラスタ内のすべてのアリアスのリスト

V1 API

curl -X GET 'https://127.0.0.1:8983/solr/admin/collections?action=LISTALIASES'

V2 API

curl -X GET https://127.0.0.1:8983/api/aliases

LISTALIASES 単一のアリアスの詳細を取得する

V2 API のみ

curl -X GET https://127.0.0.1:8983/api/aliases/testalias2

LISTALIASES レスポンス

出力には、対応するコレクション名を持つアリアスのリストが含まれます。

LISTALIASES を使用した例

既存のアリアスのリスト

入力

curl -X GET https://127.0.0.1:8983/api/aliases

出力

{
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "aliases": {
    "testalias1": "collection1",
    "testalias2": "collection2,collection1"
  },
  "properties": {
    "testalias2": {
      "someKey": "someValue"
    }
  }
}

単一のアリアスの詳細を取得する

入力

curl -X GET https://127.0.0.1:8983/api/aliases/testalias2

出力

{
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "name": "testalias2",
  "collections": [
    "collection2",
    "collection1"
  ],
  "properties": {
    "someKey": "someValue"
  }
}

ALIASPROP: アリアスプロパティの変更

ALIASPROP アクションは、アリアスのプロパティ (メタデータ) を変更します。キーに空の値が設定されている場合、それは削除されます。

V1 API

curl -X POST 'https://127.0.0.1:8983/admin/collections?action=ALIASPROP&name=techproducts_alias&property.foo=bar'

V2 API

curl -X PUT https://127.0.0.1:8983/api/aliases/techproducts_alias/properties -H 'Content-Type: application/json' -d '
{
  "properties": {"foo":"bar"}
}'

V2 API プロパティレベル API による更新

curl -X PUT https://127.0.0.1:8983/api/aliases/techproducts_alias/properties/foo -H 'Content-Type: application/json' -d '
{
  "value": "baz"
}'

V2 API プロパティレベル API による削除

curl -X DELETE https://127.0.0.1:8983/api/aliases/techproducts_alias/properties/foo -H 'Content-Type: application/json'
このコマンドを使用すると、任意のプロパティを修正できます。アリアス固有の検証は実行されません。ルーティングされたアリアスは、プロパティの値が不注意に設定された場合、機能しなくなるか、正しく機能しないか、エラーが発生する可能性があります。

ALIASPROP パラメータ

name

必須

デフォルト:なし

プロパティを設定するアリアス名。

property.name=value (v1)

オプション

デフォルト:なし

プロパティnamevalueに設定します。

"properties":{"name":"value"} (v2)

オプション

デフォルト:なし

設定するプロパティの名前/値ペアの辞書。

async

オプション

デフォルト:なし

このアクションを追跡するためのリクエストID。これは非同期的に処理されます

ALIASPROP レスポンス

出力は、リクエストの処理にかかった時間に関する詳細を含む responseHeader のみになります。アリアスプロパティの作成は、以下で説明する「アリアスプロパティのリスト」APIを使用するか、Solr管理UIの「クラウド」セクションの aliases.json を調べることで確認できます。

アリアスプロパティのリスト

指定されたアリアスに関連付けられたメタデータプロパティを取得します。Solrのv2 APIは、これらのプロパティを一括でリスト表示するか、必要に応じて名前で個別にアクセスすることをサポートしています。

V2 API アリアスのすべてのプロパティを取得

curl -X GET https://127.0.0.1:8983/api/aliases/techproducts_alias/properties

出力

{
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "properties": {
    "foo": "bar"
  }
}

V2 API アリアスの単一のプロパティ値を取得

curl -X GET https://127.0.0.1:8983/api/aliases/techproducts_alias/properties/foo

出力

{
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "value": "bar"
}

DELETEALIAS: コレクションアリアスの削除

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETEALIAS&name=testalias

V2 API

curl -X DELETE https://127.0.0.1:8983/api/aliases/testalias

DELETEALIAS パラメータ

name

必須

デフォルト:なし

削除するアリアスの名前。v2リクエストのパスで指定され、v1リクエストの明示的なリクエストパラメータとして指定されます。

async

オプション

デフォルト:なし

このアクションを追跡するためのリクエストID。これは非同期的に処理されます

DELETEALIAS レスポンス

出力は、リクエストの処理にかかった時間に関する詳細を含む responseHeader のみになります。アリアスの削除を確認するには、Solr管理UIのクラウドセクションで aliases.json ファイルを参照してください。