Solr 5はスキーマファイルを事前定義する必要がなく、実行されているインデックスに基づいてスキーマを生成することがわかりました。これがバックグラウンドでどのように機能するのか知りたいのですが?
そして、それが良い習慣であるかどうか?それを無効にする方法はありますか?
スキーマレス機能はバージョン4.3 以降Solrにあります。ただし、 同時実行の問題が4.10 で修正されたため、より安定する可能性があります。
マネージドスキーマとも呼ばれます。管理スキーマを使用するようにSolrを構成すると、Solrは特別なUpdateRequestProcessorを使用してドキュメントの索引付け要求をインターセプトし、フィールド・タイプを推測します。
Solrは_schema.xml
_ファイルから開始し、デフォルトで_managed-schema
_と呼ばれる新しいファイルを作成して、推測されたすべてのスキーマ情報を格納します。このファイルは、スキーマへの変更を検出すると、Solrによって自動的に上書きされます。
スキーマに変更を加える場合は、 Schema API を使用する必要があります。 スキーマレスモードのドキュメント も参照してください。
Solrを停止します:_$ bin/solr stop
_
_server/solr/mycore/conf
_に移動します。ここで、「mycore」はコア/コレクションの名前です。
編集_solrconfig.xml
_:
<schemaFactory class="ManagedIndexSchemaFactory">
_を検索し、要素全体にコメントを付けます<schemaFactory class="ClassicIndexSchemaFactory"/>
_を検索し、コメントを解除します<initParams>
_を参照する_add-unknown-fields-to-the-schema
_要素を検索し、_<initParams>...</initParams>
_全体をコメントアウトします。_managed-schema
_の名前を_schema.xml
_に変更すれば、完了です。
これで、Solrを再度開始できます:_$ bin/solr start
_、 http:// localhost:8983/solr /#/ mycore/documents に移動し、Solrがインデックス作成を拒否することを確認します_schema.xml
_でまだ指定されていない新しいフィールドを持つドキュメント。
それはあなたが望むものに依存します。特定のドキュメント構造を適用する場合(たとえば、すべてのドキュメントが定義に従って「整形式」であることを確認する場合)、従来のスキーマ管理を使用する必要があります。
一方、ドキュメント構造が何であるかを事前に知らない場合は、スキーマレス機能を使用することをお勧めします。
スキーマレスと呼ばれますが、インデックスを作成できる構造の種類には制限があります。ちなみに、これはSolrとElasticsearchの両方に当てはまります。たとえば、最初にこのドキュメントにインデックスを付ける場合:
_{"name":"John Doe"}
_
次に次のようなドキュメントにインデックスを付けようとすると、エラーが発生します。
_{"name": {
"first": "Daniel",
"second": "Dennett"
}
}
_
これは、最初のケースではフィールドname
が文字列型であったのに対し、2番目のケースではオブジェクトであるためです。
これらの制限を超えるインデックスを使用したい場合は、 SIREn を使用できます-これは オープンソース の半構造化ですSolrとElasticsearchの両方のプラグインとして実装されている情報検索エンジン。 (免責事項:私はSIREnを開発している会社で働いていました)
これは、Solrではいわゆるスキーマレスモードです。内部の詳細や実装方法などはわかりません。
bin/solr start -e schemaless
上記のスニペットは、Solrをスキーマレスモードで起動します。そうしないと、通常どおり機能します。
スキーマレスの詳細については、こちらをご覧ください https://cwiki.Apache.org/confluence/display/solr/Schemaless+Mode