solr的schema.xml字段类型都有哪些

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr的schema.xml字段类型都有哪些相关的知识,希望对你有一定的参考价值。

参考技术A schema.xml是Solr中用户定义字段类型及字段的配置文件
一、types节点
在节点<types> 中定义 <fieldType>子节点
包含属性:
name: FieldType的名称
class: 指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为
omitNorms: 字段检索时被省略相关的规范
positionIncrementGap:定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误
此外还可以建立索引和进行查询的时候要使用的分析器analyzer
<schema name="example" version="1.2">
<types>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
</analyzer>
</fieldType>
</types>
......
</schema>
二、fields节点
<fields>节点下包含子节点<field>
包含属性:
name 字段名字
default
-字段的默认值
indexed=true|false
-被索引,如果一个字段设为true,那么它可一进行: earchable, sortable, facetable
stored=true|false
-true 则字段应当可检索
compressed=true|false
-true 使用gzip压缩存储(只适用 compressable;TextField和StrField)
compressThreshold=<integer>
-保证压缩到不小于一个大小
multiValued=true|false
-字段是否可以多个值
omitNorms=true|false
-true 则字段检索时被省略相关的规范
omitTermFreqAndPositions=true|false
-true 省略这一领域的长远频率,位置和有效载荷

<fields>
<field name="user_id" type="string" indexed="true" stored="true" required="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="phone" type="string" indexed="false" stored="true" />
<field name="email" type="string" indexed="false" stored="true" />
<field name="image" type="string" indexed="false" stored="true" />
<field name="city_id" type="int" indexed="true" stored="true" />
<field name="address" type="string" index="false" stored="true" />
<field name="created" type="int" index="false" stored="true" />
<field name="all" type="string" index="true" stored="true" />
</fields>

2.dynamicField 动态字段
动态字段,没有具体名称的字段
name为*_i,定义它的type为int,那么在使用这个字段的时候,任务以_i结果的字段都被认为符合这个定义。如name_i, school_i
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
三、 uniqueKey 设置字段惟一
<uniqueKey>user_id</uniqueKey>

四、默认搜索字段
<defaultSearchField>name</defaultSearchField>
五、默认搜索类型
<solrQueryParser defaultOperator="AND|OR" />
六、copyField 拷贝到另一个字段
<copyField source="name" dest="all"/>
<copyField source="email" dest="all" />
schema.xml 例子:
<?xml version="1.0" encoding="UTF-8" ?>

<schema name="example" version="1.2">
<types>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
</analyzer>
</fieldType>
</types>

<fields>
<field name="user_id" type="string" indexed="true" stored="true" required="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="phone" type="string" indexed="false" stored="true" />
<field name="email" type="string" indexed="false" stored="true" multiValued="true" />
<field name="image" type="string" indexed="false" stored="true" />
<field name="city_id" type="int" indexed="true" stored="true" />
<field name="address" type="string" index="false" stored="true" />
<field name="created" type="int" index="false" stored="true" />
<field name="all" type="string" index="true" stored="true" />
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
</fields>

<uniqueKey>user_id</uniqueKey>
<defaultSearchField>name</defaultSearchField>
<copyField source="name" dest="all" />
<copyField source="phone" dest="all" />
<copyField source="email" dest="all" />
</schema>

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

【中文标题】如何在 solr 6+ 中使用托管模式编辑字段类型【英文标题】:How do I edit field types with managed schemas in solr 6+ 【发布时间】:2018-05-23 01:44:36 【问题描述】:

我正在从 solr 4 迁移到 solr 6。 Solr 正在使用我的旧 schema.xml 创建一个新的 managed_schema。 使用 solr 管理网站 ui,我可以编辑托管模式。 但是,field_types 不可编辑。我不知道如何更换分析仪。

我可以在我的 schema.xml 中对其进行编辑,然后删除 managed_schema,使其重新构建 managed_schema。但这很乏味。

我知道我可以更改 solrconfig 以使用 schema.xml 而不是托管模式。但我更愿意做的是迁移到托管模式。我只需要能够更换分析仪。

所以我的问题是:如何使用托管模式 UI 对 field_type 内的分析器进行更改(或者其他方法也可以,如果容易的话)?

【问题讨论】:

【参考方案1】:

可以编辑 managed_schema,然后重新加载核心。您只是不应该手动编辑 managed_schema,因为您正在通过 UI 更改它,因为这将覆盖手动更改。

【讨论】:

这是处理此问题的首选方式吗?他们的文档似乎暗示编辑文件不是要走的路 首选方式是通过 API。但不是 API 具有管理 UI 实现。因此,您可以直接使用 HTTP 调用来完成。或者您可以像答案中那样手动编辑它。请注意,如果您运行 SolrCloud,您的 managed_schema 实际上并不在磁盘上。因此,您需要下载/编辑/重新上传。同样,这不是最好的选择,而是一个有效的选择。

以上是关于solr的schema.xml字段类型都有哪些的主要内容,如果未能解决你的问题,请参考以下文章

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

[Solr] schema.xml中定义字段

solr5.5教程-schema.xml部分配置

schema.xml的配置

SOLR 不搜索某些字段

Solr 配置文件之schema.xml