如何在solr配置文件里添加新的搜索字段

如何在solr配置文件里添加新的搜索字段,第1张

solr的三个配置文件:

1、solrconfig.xml

只配置一次就够了

2、data-config.xml

配置数据库与solr搜索的映射关系,需要按实际情况处理

3、schema.xml

配置solr搜索字段

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压缩存储(只适用 compressableTextField和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>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11424385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存