欢迎投稿

今日深度:

Solr之Schema.xml,

Solr之Schema.xml,


 schema.xml 是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否分词,是否存储,是否标准化即 Norms ,是否存储项向量等等。

结构:

<schema name="example-data-driven-schema" version="1.6">
  <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
  <copyField source="*" dest="_text_"/>
  <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
  <uniqueKey>id</uniqueKey>
   <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
   <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
      <analyzer> 
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
        <filter class="solr.SnowballPorterFilterFactory" language="Basque"/>
      </analyzer>
    </fieldType>
	<useDocValuesAsStored>false</useDocValuesAsStored>
</schema>

其中,field 用来定义域 属性, fieldType 用来定义域类型。

field 元素有很多属性可以配置:
name: 表示域的名称,是强制必须有的属性
type: 域类型的名称,与 fieldType 元素的 name 属性值对应,也是强制必须有的属性,不可省略
indexed: true 即表示需要对该域进行索引,一般如果你需要在该域上进行查询或排序时,则需要配置为 true, 默认值为 false
stored: 表示是否需要把域值存储到硬盘上,方便你后续查询时能再次提取出来原样显示给用户

multiValued: 表示这个域是否可以存储多个值,若设置为 true, 即表示这是一个多值域

docValues: 表示此域是否需要添加一个 docValues 域,这对 facet 查询, group 分组,排序, function 查询有好处,尽管这个属性不是必须的,但他能加快索引数据加载,对 NRT 近实时搜索比较友好,且更节省内存,但它也有一些限制,比如当前docValues 域只支持 strField,UUIDField,Trie*Field 等域,且要求域的域值是单值不能是多值域

omitNorms: 此属性若设置为 true ,即表示将忽略域值的长度标准化,忽略在索引过程中对当前域的权重设置,且会节省内存。只有全文本域或者你需要在索引创建过程中设置域的权重时才需要把这个值设为 false, 对于基本数据类型且不分词的域如intFeild,longField,StrField 等默认此属性值就是 true, 否则默认就是 false.

termVectors: 设置为 true 即表示需要为该 field 存储项向量信息,当你需要MoreLikeThis 功能时,则需要将此属性值设为 true ,这样会带来一些性能提升。
termPositions: 是否存储 Term 的起始位置信息,这会增大索引的体积,但高亮功能需要依赖此项设置,否则无法高亮

termOffsets: 表示是否存储索引的位置偏移量,高亮功能需要此项配置,当你使用SpanQuery 时,此项配置会影响匹配的结果集

动态字段dynamicField
动态字段是一些特殊类型的字段,可以在任何时候将这些字段添加到任何文档中,由字段声明定义它们的属性。
动态字段和普通字段之间的关键区别在于前者不需要在 schema.xml 中提前声明名称。
Solr 将名称声明中的 glob-like 模式应用到所有尚未声明的引入的字段名称,并根据其 <dynamicField> 声明定义的语义来处理字段。
例如,<dynamicField name="*_i" type="sint" indexed="true" stored="true"/> 指一个 myRating_i 字段被 Solr 处理为 sint,尽管并未将其声明为字段。

copyField

复制域即表示把某个域的值复制到一个目标域上面,那如果把多个域的值复制到一个目标域上面呢,你可以进行多次复制,体现到 XML 配置上就是类似这样的配置:
<copyField source="title" dest="text"/>
<copyField source="body" dest="text"/>
如上配置就表示把 title 和 body 这两个域的值全部复制到 text 这个新域上面,

uniqueKey

指定一个field为唯一索引

fieldType

定义field的类型
name:必填,被field配置使用
class:必填,filedType的实现类。solr.TextField是路径缩写,"等价于"org.apache.solr.schema.TextField"
multiValued:属性是一个特殊的例子,指 Document 可以拥有一个相同名称添加了多次的 Field
positionIncrementGap:指定mutiValued的距离,,其作用就是在对Multivalue Field进行处理的时候,给两个field中相隔的词人为的插入一段固定的distance
ananlyzer:分析器,如果class是solr.TextField,这个配置是必填的。告诉solr如何处理某些单词、如何分词,比如要不要去掉“a”,要不要全部变成小写……
type:index或query
tokenizer:分词器,比如:StandardTokenizerFactory
filter:过滤器,比如:LowerCaseFilterFactory

useDocValuesAsStored

被设置成stored="true"的field在搜索时会被返回。 然而,useDocValuesAsStored可以控制Field values是否可以被返回, 换句话说,  如果useDocValuesAsStored="true" ,那么没有被设置成stored="true"的docValues Field同样会被返回。

www.htsjk.Com true http://www.htsjk.com/solr/37846.html NewsArticle Solr之Schema.xml,  schema.xml 是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否分词,是否存储,是否标准化即 Norms ,是否存储项向量等等。 结构: schema name="exam...
相关文章
    暂无相关文章
评论暂时关闭