美文网首页
schema的三种模式

schema的三种模式

作者: Vekaco | 来源:发表于2019-03-17 23:09 被阅读0次
  1. 手动模式:之前几个章节已经阐述,完全通过手动修改schema.xml文件来修改。不支持运行时修改,需要修改后重新load core或者重启solr server。
  2. schema api模式:支持运行时修改
<!--solrconfig.xml中配置ManagedIndexSchemaFactory-->
<schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory>
  • mutable:控制是否允许运行时修改schema信息,如果你想要启用schema api,mutable必须设置为true,如果设置为false,即表示所致schema文件禁止修改
  • managedSchemaResourceName:定义ManagedIndexSchemaFactory管理的schema配置文件名称,若不指定默认是managed-schema。若<schemaFactory/>没有在solrconfig.xml中显示指定,solr会隐式的使用ManagedIndexSchemaFactory。

I. Schema API入口点:
Schema API接口的baseURL:http://<host>:<port>/solr/<collection_name>

  1. /schema
    查询或更新schema信息,比如添加删除替换域、动态域、复制域、域类型。wt参数可以是json/xml/schema.xml
    eg. GET http://localhost:8080/solr/gettingstarted/schema?wt=json

  2. /schema/fields
    获取schema.xml中定义的所有域的信息或者回去指定域的信息。

3)/schema/dynamicfields
获取schema.xml中定义的所有动态域的信息或者获取指定动态域的信息

4) /schema/fieldtypes
获取schema.xml中定义的所有域类型的信息或者获取指定域类型的信息

5)/schema/copyfields
获取schema.xml中定义的所有复制域信息

  • wt:string类型参数,响应结果输出格式,可选json/xml
  • source.fl:string类型参数,返回哪些source域的信息,多个域名称用逗号分隔
  • dest.fl:string类型参数,返回哪些dest域的信息,多个域名称用逗号分隔
    eg. GET http://localhost:8080/solr/gettingstarted/schema/copyfields
  1. /schema/name
    获取schema.xml中定义的name信息
    eg. GET http://localhost:8080/solr/gettingstarted/schema/name

  2. /schema/version
    获取schema.xml的版本号

  3. /schema/uniquekey
    获取schema.xml中定义的uniqueKey信息

  4. /schema/solrquerypareser/defaultoperator
    获取solrqueryparser的默认操作符

II.修改Schema接口
POST /collection/schema
1)add-field
添加一个域到schema配置文件中,如果域名称重复,则抛出异常。
{
"add-field":{
"name":"sell-by",
"type":"tdate",
"stored":true}
}

  1. delete-field
    删除一个域,如果该域不存在,或者该域是复制域的source域或dest域,则抛出异常。
    {"delete-field":{"name":"sell-by"}}

  2. replace-field
    使用新的配置替换一个已存在域的旧配置信息,如果该域不存在,则抛出异常。
    {"replace-field":{
    "name":"sell-by",
    "type":"date",
    "stored":false
    }}

  3. add-dynamic-field
    添加一个动态域到schema配置文件中,如果动态域名称重复,则抛出异常。
    {
    "add-dynamic-field":
    {
    "name":"*_s",
    "type":"string",
    "stored":true
    }}

  4. delete-dynamic-field
    删除一个动态域,如果该动态域不存在,或者该动态域是复制域的source或dest域,则抛出异常。
    {"delete-dynamic-field":{"name":"*_s"}}

  5. replace-dynamic-field
    使用新配置替换一个已存在的动态域的旧配置信息,如果该动态域不存在,则抛出异常。
    {
    "replace-dynamic-field":
    {
    "name":"*_s",
    "type":"text_general",
    "stored":false
    }
    }

  6. add-field-type
    添加一个域类型到schema配置文件中,如果域类型名称重复了,则抛出异常。
    {
    "add-field-type": {
    "name":"myNewTxtField",
    "class":"solr.TextField",
    "positionIncrementGap":"100",
    "analyzer": {
    "charFilters":[{
    "class":"solr.PatternReplaceCharFilterFactory",
    "replacement":"11",
    "pattern":"([a-zA-Z])\\1+"}],
    "tokenizer":{
    "class":"solr.WhitespaceTokenizerFactory",
    "filters":[{
    "class":"solr.WordDelimierFilterFactory",
    "preserveOriginal":"0"}]}}}}

  7. delete-field-type
    删除一个域类型,如果该域类型不存在,或者存在任何普通域或者动态域引用了该域,则抛出异常。
    {"delete-field-type":{"name":"myNewTxtField"}}

  8. replace-field-type
    使用新的配置替换一个已存在域类型的旧配置信息,如果该域类型不存在,则抛出异常。
    {
    "replace-field-type":{
    "name":"myNewTxtField",
    "class":"solr.TextField",
    "positionIncrementGap":"100",
    "analyzer":{
    "tokenizer":{
    "class":"solr.StandardTikenizerFactory"}}}
    }

  9. add-copy-field
    添加一个复制域到schema配置文件中
    {
    "add-copy-field":{
    "source":"shelf",
    "dest":["location","catchall"].
    "maxChars":"150"
    }
    }

  10. delete-copy-field
    删除一个复制域,如果该复制域不存在,则抛出异常
    {
    "delete-copy-field":{"source":"shelf","dest":"location"}
    }

当使用schema API修改schema信息是,solr core会自动重新加载以便schema信息的改变能立即应用于后续添加的文档,对schema修改前添加的文档无效,需要重新索引。

多个操作能够叠加使用,且具有原子性,其中一个执行失败整个操作集合失败,且应当注意顺序。
{
"add-field-type": {
"name":"myNewTxtField",
"class":"solr.TextField",
"positionIncrementGap":"100",
"analyzer": {
"charFilters":[{
"class":"solr.PatternReplaceCharFilterFactory",
"replacement":"11",
"pattern":"([a-zA-Z])\\1+"}],
"tokenizer":{
"class":"solr.WhitespaceTokenizerFactory",
"filters":[{
"class":"solr.WordDelimierFilterFactory",
"preserveOriginal":"0"}]}}},

"add-field":{
"name":"myNewTxtField",
"type":"tdate",
"stored":true}
}

同样的重复操作也可以有如下两种方式:

  • (1)
    {
    "add-field":{
    "name":"myNewTxtField",
    "type":"tdate",
    "stored":true},

"add-field":{
"name":"myNewTxtField2",
"type":"tdate",
"stored":true},

"add-field":{
"name":"myNewTxtField3",
"type":"tdate",
"stored":true}
}

  • (2)
    {
    "add-field":[
    {
    "name":"myNewTxtField3",
    "type":"tdate",
    "stored":true
    },"add-field":{
    "name":"myNewTxtField2",
    "type":"tdate",
    "stored":true},
    "add-field":{
    "name":"myNewTxtField",
    "type":"tdate",
    "stored":true}
    ]
    }
  1. 无schema模式
    通过索引数据构造高效的schema,而不需要手动修改。
  • 配置schemaless mode
<!--solrconfig.xml-->
<schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema.xml</str>
</schemaFactory>
  • 配置UpdateRequestProcessorChain
<!--solrconfig.xml-->
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema">
<processor class="solr.UUIDUpdateProcessorFactory"/>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
<processor class="solr.RemoveBlankFieldUpdateProcessorFactory"/>
<processor class="solr.FieldNameMutatingUpdateProcessorFactory">
<!--若域名称里包含正则表达匹配的字符,那么就将其替换成replacment-->
<str name="pattern">[^\w-\.]</str>
<str name="replacement">_</str>
</processor>
<processor class="solr.ParseBooleanFieldUpdateProcessorFactory"/>
<processor class="solr.ParseLongFieldUpdateProcessorFactory"/>
<processor class="solr.ParseDoubleFieldUpdateProcessorFactory/"><processor class="solr.ParseDateFieldUpdateProcessorFactory">
<arr name="format">
<str>yyyy-MM-dd'T' HH:mm:ss.SSSZ</str>
<str>yyyy-MM-dd'T' HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd'T' HH:mm:ss.SSS</str>
<str>yyyy-MM-dd'T' HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd'T' HH:mm:ssZ</str>
<str>yyyy-MM-dd'T' HH:mm:ss</str>
<str>yyyy-MM-dd'T' HH:mmZ</str>
<str>yyyy-MM-dd'T' HH:mm</str>
<str>yyyy-MM-dd HH:mm:ss.SSSZ</str>
<str>yyyy-MM-dd HH:mm:ss,SSSZ</str>
<str>yyyy-MM-dd HH:mm:ss.SSS</str>
<str>yyyy-MM-dd HH:mm:ss,SSS</str>
<str>yyyy-MM-dd HH:mm:ssZ</str>
<str>yyyy-MM-dd HH:mm:ss</str>
<str>yyyy-MM-dd HH:mmZ</str>
<str>yyyy-MM-dd HH:mm</str>
<str>yyyy-MM-dd</str>
</arr>
</processor>

<processor class="solr.AddSchemaFieldsUpsateProcessorFactory">
<str name="defaultFieldType">strings</str>
<lst name="typeMapping">
<str name="valueClass">java.lang.Boolean</str>
<str name="fieldType">booleans</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.util.Date</str>
<str name="fieldType">tdates</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Long</str>
<str name="fieldType">tlongs</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Number</str>
<str name="fieldType">tdoubles</str>
</lst>
</processor>
<process class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>

updateRequestProcessorChain允许solr去猜测域值的类型,需要预先定义默认的域类型,已经FieldType与Java数据类型之间的映射关系,即配置的ParseXXXFieldUpdateProcessorFactory的作用,然后自动添加域是AddSchemaFieldsUpdateProcessorFactory的作用。

-创建索引
URL: POST http://localhost:8080/solr/gettingstarted/update?commit=true
content-type:application/csv

//csv 数据
id,Artist,Album,Released,Rating,FromDistributor,Sold
44C,Old Shews,Mead for Walking,198800813,0.01,14,0

相关文章

  • SAAS软件架构——数据层架构实践

    1. 多租户数据架构三种模式: ①独立数据库②共享数据库、独立 Schema③共享数据库、共享 Schema、共享...

  • schema的三种模式

    手动模式:之前几个章节已经阐述,完全通过手动修改schema.xml文件来修改。不支持运行时修改,需要修改后重新l...

  • Solr索引详解

    1、Schema介绍 schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内...

  • 数据库基础——基本操作

    基本操作 Schema: Schema中文是模式的意思,在MySQL中与数据库同义 创建Schema 创建Sche...

  • SQL笔记

    数据定义 模式 定义模式CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;CREAT...

  • SQL语句(模式与表)

    数据定义 模式的定义与删除 定义模式 CREATE SCHEMA <模式名> AUTHOTIZATION <用户名...

  • 详解XML中的模式Schema

    XML中拥有Schema特性,能够比DTD更加强大地引入元素结构,下面我们就来详解XML中的模式Schema的概念...

  • SQL笔记

    一、数据定义1.数据模式的创建和撤销 Create schema <模式名> authorization <用户名...

  • Vi和Vim

    三种模式 三种模式的切换

  • 数据库关键词翻译

    SCHEMA 模式AUTHORIZATION 授权认可CASCADE 级联RESTRICT 限制DROP 删除PR...

网友评论

      本文标题:schema的三种模式

      本文链接:https://www.haomeiwen.com/subject/kzwumqtx.html