Solr的Schema API(模式)

Posted 莫西里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr的Schema API(模式)相关的知识,希望对你有一定的参考价值。

一、介绍

Solr中的每一个core/collection都拥有自己的schema(模式),在solr 5之前,solr使用schema.xml文件进行定义,早solr 5以后,solr支持通过api对core/collection进行模式的修改。因此在solr 5用户有两种模式方式:经典模式与manager-schema,两种模式。

二、解释

1、经典模式与manager-schema

(1)经典模式

经典模式下,用户只能通过schema.xml文件去定义FieldType、Field等,因此这种情况下需要特别的注意在定义模式小心出现漏定义的错误。因为solr5以后的版本默认使用manage-schema模式,因此如果想使用经典模式,则需要在solrconfig.xml文件中定义schemaFactory标签进行模式的定义:

<schemaFactory class="ClassicIndexSchemaFactory"/>

(2)manager-schema

manage-schema模式不支持用户通过修改manage-schema文件去进行FieldType、Field的修改(但实际上是可以manage-schema文件进行修改)。manage-schema提供一套schema api去创建、修改、删除FieldType、Field等。定义方式为:

<schemaFactory class="ManagedIndexSchemaFactory">
    <bool name="mutable">true</bool>
    <str name="managedSchemaResourceName">managed-schema</str>
  </schemaFactory>

nanagedSchemaResourceName属性定义了schema.xml文件的路径,这里使用的是相对路径,因此managed-schema文件跟solrconfig.xml文件在同一个目录中。


2、managed-schema模式下的Schema API

Schema API是一套REST风格的API,用户可以通过浏览器,或者使用某种语言中的HTTPClient
对象进行访问。

(1)定义新模式

HTTP Method:POST; Content-type:json,则定义新默认的Java代码为

public void addField() throws IOException
	
		String urlStr="http://192.98.12.36:8983/solr/techproducts/schema";
		URL url=new URL(urlStr);
		HttpURLConnection connection=(HttpURLConnection) url.openConnection();
		connection.setRequestMethod("POST");
		connection.setRequestProperty("Content-type", "application/json");
		connection.setDoOutput(true);
		connection.setDoInput(true);
		BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
		JSONObject field=new JSONObject();
		field.put("name", "test");
		field.put("type", "text_general");
		field.put("stored", true);
		JSONObject addDoc=new JSONObject();
		addDoc.put("add-field",field);
		System.out.println(addDoc.toString());
		writer.write(addDoc.toString());
		writer.flush();
		writer.close();
		//
		BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));
		while(reader.ready())
		
			System.out.println(reader.readLine());
		
		reader.close();
	


以上是关于Solr的Schema API(模式)的主要内容,如果未能解决你的问题,请参考以下文章

Solr 是不是有读取 schema.xml 的 API?

Solr 5.1.0:如何通过 Schema API 设置唯一键

如何在 solr 6+ 中使用托管模式编辑字段类型

认识配置文件schema.xml(managed-schema)

Solr集群更新配置的方式

Solr4.10.4 加中文分词