スキーマ設定を変更するための構文

スキーマ設定を変更する際に使用する構文について説明します。

既存の検索インデックス・スキーマの設定の追加、設定、削除を行うには、ALTER SEARCH INDEXを使用します。

検索インデックス・スキーマはXML形式で、大半のSolr schema.xml要素をサポートしています。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
  <types>
    <fieldType class="class_name" name="type_name"/>
      <analyzer>
        <tokenizer class="class_name"/>
        <filter class="class_name"/>
      </analyzer>
    </fieldType>
   </types>
  <fields>
    <field indexed="boolean" multiValued="boolean" name="unique_name" stored="boolean" type="type_name"/>
    <dynamicField indexed="boolean" multiValued="boolean" name="fieldname_wildcard_match" stored="boolean" type="type_name"/>
  </fields>
  <uniqueKey>partition_key</uniqueKey>
  <copyField source='field_name' dest='field_name' />
</schema>
CQL ALTER SEARCH INDEX SCHEMAの基本構文:
ALTER SEARCH INDEX SCHEMA ON keyspace_name.table_name ADD ([shortcut]| element_path) [ element_definition | WITH $$jsonsnippet$$];
ここで、

ショートカット・キーワードの使用

fieldfieldType、およびcopyFieldの各ショートカットを使用して以下の操作を行います。
  • インデックスのテーブル・カラムの追加または削除を行います。例を以下に示します。
    ALTER SEARCH INDEX SCHEMA ON demo.health_data ADD field gender;
    フィールド名とカラム名が一致する場合、フィールド定義は自動的に保留中のスキーマに追加されます。
  • 要素(fieldfieldType、およびcopyField)を特定してから、要素パスまたはJSON定義を使用して設定を変更します。
    ALTER SEARCH INDEX SCHEMA ON wiki.solr ADD copyField[@source='title', @dest='catch_all'];

要素パスの使用

要素パスは、スキーマXMLの設定を一意に記述します。要素の後ろにある属性をかっこで囲み、コンマ区切りリストを使用して複数の属性を定義します。要素を追加する際、すべての属性を含めます。
top_level_element_name.child_element_name[@attribute_name='value', ...]
たとえば、テキスト・フィールドの型定義を追加するには、以下のように入力します。
types.fieldType[ @name='TextField_intl' , @class='org.apache.solr.schema.TextField' ]
また、要素パスはスキーマのサブ要素の記述にも使用できます。
element_pathを使用してスキーマのサブ要素を変更できます。たとえば、検索アナライザーのASCIIFoldingFilterFactoryをClassicFilterFactoryに変更するには、以下のように入力します。
ALTER SEARCH INDEX SCHEMA ON demo.users SET types.fieldType[@name='TextField_intl'] .analyzer[@type='search'] .filter[@class='solr.ASCIIFoldingFilterFactory']@class= 'solr.ClassicFilterFactory';
fieldTypeを変更します。
"solr.ClassicFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

JSONで複雑な要素を定義する

このJSONスニペットはXML要素および属性に変換されます。
  • JSONペアはXML属性に変換されます。
  • JSONオブジェクトはXML要素に変換されます。
JSONは以下のXML属性に変換されます。
$${
    "analyzer": [
      {
        "type": "index",
        "tokenizer": { "class": "solr.StandardTokenizerFactory" },
        "filter": [
          { "class": "solr.LowerCaseFilterFactory" },
          { "class": "solr.ASCIIFoldingFilterFactory" }
        ]
      },
      {
        "type": "search",
        "tokenizer": { "class": "solr.StandardTokenizerFactory" },
        "filter": [
          { "class": "solr.LowerCaseFilterFactory" },
          { "class": "solr.ASCIIFoldingFilterFactory" }
        ]
      }
    ]
}$$
JSONは以下のXML要素に変換されます。
"analyzer": [				
{ "type": "index", <analyzer type="index">
  "tokenizer":                         
  { "class": "solr.Standard..." }, <tokenizer class="solr.Standard..."/>
    "filter": [				  
    { "class": "solr.LowerCase..." }, <filter class="solr.LowerCase..."/>
    { "class": "solr.ASCII..." } <filter class="solr.ASCII..."/>

要素または属性の削除

検索句アナライザーの2番目のフィルターを削除するCQLコマンド構文。
ALTER SEARCH INDEX SCHEMA ON demo.users DROP types.fieldType[@name='TextField_intl'] .analyzer[@type='search'] .filter[@class='solr.ClassicFilterFactory'];
fieldTypeを変更します。
<fieldType class="org.apache.solr.schema.TextField" name="TextField_intl">
  ...
<analyzer type="search">
    <filter class="solr.LowerCaseFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

スキーマ

インデックスを作成するCQLカラムを記述し、Solrデータ型を設定し、各フィールド型のインデックス作成および検索方法を定義し、プライマリ・キーを定義します。

スキーマは、XML形式で表示されます。要素パスを使用して、要素と属性を定義し、特定します。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
  <types>
    <fieldType class="class_path" 
               name="fieldtype_name" >
      <analyzer>
        <tokenizer class="class_path"/>
        <filter class="class_path"/>
      </analyzer>
    </fieldType>
  </types>
  <fields>
    <field attribute_name="value"
          docValues="true|false" 
          indexed="true|false" 
          multiValued="true|false" 
          name="column_name" 
          stored="true|false" 
          type="fieldtype_name"/>
    
    <copyField 
               source="field_name" 
               dest="field_name" />
  </fields>
  <uniqueKey>pk_column_list</uniqueKey>
</schema>
ADD FIELD column_name
デフォルトのマッピングを使用して、CQLテーブルのカラムを保留中の検索インデックス・スキーマに追加します。
ALTER SEARCH INDEX SCHEMA ON demo.health_data ADD field fips;
ADD fields.field[@attribute_name='value', ...]
新しいフィールドを保留中のスキーマに追加し、手動で属性を設定します。たとえば、テーブルのカラムをインデックスに追加し、フィールド型を文字列に設定するには、以下のように入力します。
ALTER SEARCH INDEX SCHEMA ON demo.health_data ADD fields.field[@name='fish', @type='StrField', @indexed='true'];
DROP field field_name
保留中の検索インデックス・スキーマからフィールドを削除します。
ALTER SEARCH INDEX SCHEMA ON demo.health_data DROP field fips;
SET fields.field[@name='field_name']@attribute_name='value'
attribute_to_changeを追加するか、または置き換えて、かっこで囲まれている属性で指定されているフィールドを変更します。
フィールド属性:
  • name:CQLテーブル・カラム名またはcopyFieldデスティネーションの名前に一致します。
  • type:定義されているfieldTypeの名前。
  • indexed:trueの場合、そのフィールドのインデックスが作成されます。デフォルトでは、作成時のインデックス内に含まれているフィールドのみ表示されます。
    注: プライマリ・キー・カラムはインデックスが作成される必要があります(indexed="true")。
  • docValues:フィールド値でフォワード・インデックスを作成します。
  • multiValued:セット、マップ、リスト・カラムや、複数のcopyField定義のデスティネーションなど、複数の値が含まれます。
制約事項: storedフィールド属性はサポートされていません。
ALTER SEARCH INDEX SCHEMA ON demo.health_data SET fields.field[@name='gender_s']@multiValued='true';
ADD types.fieldType[@attribute_name='value', …] WITH $$ { json_map } $$
インデックス内のフィールドの分析、トークン化、フィルター処理を行うため、フィールド型定義をスキーマに追加します。
ADD types.fieldType[@name='TrieIntField', @class='solr.TrieIntField']
注: 必要に応じて、命名規則に従って構造を提供するには、SET fields.field field_nameの先頭要素fields.を追加します。