欢迎进入广州凡科互联网科技有限公司网站
全国服务热线
4000-399-000
金融企业网站建设-Solr:Schema设计
时间: 2021-04-17 09:39 浏览次数:
DIDA是根据PHP,MYSQL的开发设计架构,是中国大神根据海外时兴的手机软件DRUPAL做的精减版,应用十分灵便,本网站根据DIDA出示下列材料,CMS管理方法系统软件,WEB2.0,SNS,问与答系统软件,交朋友系
--------

金融企业网站建设

------- DIDA是根据PHP,MYSQL的开发设计架构,是中国大牛根据海外时兴的手机软件DRUPAL做的精简版,应用十分灵便,本站根据DIDA出示以下材料,CMS管理方法系统软件,WEB2.0,SNS,问与答系统软件,交朋友系统软件,淘宝客系统软件,公司建网站等.

 

Solr将数据信息以构造化的方法存入系统软件中,储存的全过程中能够对数据信息创建数据库索引,这个构造的界定就是根据schema.xml来配备的。

xml version="1.0" encoding="UTF-8" ? 

field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /
dynamicField name="*_i" type="int" indexed="true" stored="true"/ dynamicField name="*_is" type="int" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_s" type="string" indexed="true" stored="true" / dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_l" type="long" indexed="true" stored="true"/ dynamicField name="*_ls" type="long" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_t" type="text_general" indexed="true" stored="true"/ dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_b" type="boolean" indexed="true" stored="true"/ dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_f" type="float" indexed="true" stored="true"/ dynamicField name="*_fs" type="float" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_d" type="double" indexed="true" stored="true"/ dynamicField name="*_ds" type="double" indexed="true" stored="true" multiValued="true"/
dynamicField name="*_dt" type="date" indexed="true" stored="true"/ dynamicField name="*_dts" type="date" indexed="true" stored="true" multiValued="true"/ dynamicField name="*_p" type="location" indexed="true" stored="true"/
dynamicField name="*_ti" type="tint" indexed="true" stored="true"/ dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/ dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/ dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/ dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/ dynamicField name="*_c" type="currency" indexed="true" stored="true"/ dynamicField name="ignored_*" type="ignored" multiValued="true"/ dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/ dynamicField name="random_*" type="random" /
fieldType name="int" precisionStep="0" positionIncrementGap="0"/ fieldType name="float" precisionStep="0" positionIncrementGap="0"/ fieldType name="long" precisionStep="0" positionIncrementGap="0"/ fieldType name="double" precisionStep="0" positionIncrementGap="0"/
fieldType name="tint" precisionStep="8" positionIncrementGap="0"/ fieldType name="tfloat" precisionStep="8" positionIncrementGap="0"/ fieldType name="tlong" precisionStep="8" positionIncrementGap="0"/ fieldType name="tdouble" precisionStep="8" positionIncrementGap="0"/
filter ignoreCase="true" words="stopwords.txt" / filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/ filter / analyzer fieldType
filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/ filter ignoreCase="true" words="lang/stopwords_en.txt" filter / filter / filter protected="protwords.txt"/ filter / analyzer fieldType
fieldType name="text_en_splitting" positionIncrementGap="100" autoGeneratePhraseQueries="true" analyzer type="index" tokenizer /
filter generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/ filter / filter protected="protwords.txt"/ filter / analyzer analyzer type="query" tokenizer / filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/ filter ignoreCase="true" words="lang/stopwords_en.txt" filter generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/ filter / filter protected="protwords.txt"/ filter / analyzer fieldType
fieldType name="text_en_splitting_tight" positionIncrementGap="100" autoGeneratePhraseQueries="true" analyzer tokenizer / filter synonyms="synonyms.txt" ignoreCase="true" expand="false"/ filter ignoreCase="true" words="lang/stopwords_en.txt"/ filter generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/ filter / filter protected="protwords.txt"/ filter / filter / analyzer fieldType
filter withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/ analyzer analyzer type="query" tokenizer / filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/ filter ignoreCase="true" words="stopwords.txt" / filter / analyzer fieldType
fieldType name="location_rpt" geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" /
fieldType name="bbox" geo="true" distanceUnits="kilometers" numberType="_bbox_coord" / fieldType name="_bbox_coord" precisionStep="8" docValues="true" stored="false"/
fieldType name="currency" precisionStep="8" defaultCurrency="USD" currencyConfig="currency.xml" / schema
View Code

 

schema.xml坐落于solr/conf/文件目录下,相近于数据信息表配备文档,界定了添加数据库索引的数据信息的数据信息种类,关键包含type、fields和别的的一些缺省设定。Solr的schema配备是是非非常灵便和丰富多彩,下面将对此开展详尽详细介绍。

先来看一个简易的schema配备:

schema.xml 配备文档的根元素就是 schema, 有个 name 特性, name 特性值能够随意配,根元素没甚么好说的, schema 元素下关键有两个标识元素即 field 和fieldType,field 表明域,用来界定域, fieldType 用来界定域种类。

在fields结点内界定实际的字段(相近数据信息库中的字段),就是filed,filed界定包含name,type(为之前界定过的各种各样FieldType),indexed(是不是被数据库索引),stored(是不是被存储),multiValued(是不是有多个值)等等。 
例: 

Field即构造化中得某一个字段,field特性表明:

name:特性的名字,这里有个独特的特性“_version_”是务必加上的。 type:字段的数据信息构造种类,所用到的种类需要在fieldType中设定。 default:默认设置值。 indexed:是不是建立数据库索引 stored:是不是储存原始数据信息(假如不需要储存相应字段值,尽可能设为false) docValues:表明此域是不是需要加上一个 docValues 域,这对 facet 查寻, group 排序,排列, function 查寻有益处,虽然这个特性并不是务必的,但他能加速数据库索引数据信息载入,对 NRT 近即时检索比较友善,且更节约运行内存,但它也有一些限定,例如当今docValues 域只适用 strField,UUIDField,Trie*Field 等域,且要求域的域值是单值不可以是多值域 solrMissingFirst/solrMissingLast:查寻結果排列的全过程中,假如发现这个字段的值不存在,则排在前面/后边,忽视排列的标准 multValued:是不是有多个值,例如说一个客户的全部朋友id。(对将会存在多值的字段尽可能设定为true,防止建数据库索引时抛错误误) omitNorms:此特性若设定为 true ,即表明将忽视域值的长度规范化,忽视在数据库索引全过程中对当今域的权重设定,且会节约运行内存。仅有全文字域或你需要在数据库索引建立全过程中设定域的权重时才需要把这个值设为 false, 针对基本数据信息种类且分不清词的域如intFeild,longField,StrField 等默认设置此特性值就是 true, 不然默认设置就是 false. required:加上文本文档时,该字段务必存在,相近mysql的not null termVectors: 设定为 true 即表明需要为该 field 储存项空间向量信息内容,当你需要MoreLikeThis 作用时,则需要将此特性值设为 true ,这样会带来一些特性提高。 termPositions: 是不是储存 Term 的起止部位信息内容,这会增大数据库索引的体积,但高亮度作用需要依靠此项设定,不然没法高亮度 termOffsets: 表明是不是储存数据库索引的部位偏移量,高亮度作用需要此项配备,当你应用SpanQuery 时,此项配备会危害配对的結果集

field的界定非常关键,有几个技能需留意一下:

将全部只用于检索的,而不需要做为查寻結果的field(非常是一些比较大的field)的stored设定为false。 将不需要被用于检索的,而只是做为查寻結果回到的field的indexed设定为false。 删掉全部无须要的copyField申明,依据需要决策是不是开展储存。 以便数据库索引字段的最少化和检索的高效率,将全部的 text fields的index都设定成false,随后应用copyField将她们都拷贝到一个总的 text field上,随后对他开展检索。

field 里也有两个比较难了解的域,是 Solr 拓展的,在 Lucene 中沒有的定义,即dynamicField 动态性域和 copyField 拷贝域: 

一切正常数据信息构造一个是需要考虑到汉语分词,二个是考虑到是不是数据库索引,是不是分词,是不是储存等等。下面的示范性用到了三类型型的数据信息:

字段需要分词、需要数据库索引、需要储存,如:网页页面中的题目、內容等字段。 字段需要数据库索引,但不需要分词,需要储存,如:网页页面的公布時间等內容。 字段不需要数据库索引,不需要分词,但需要储存,如:引入的照片部位。

不存在不需要数据库索引、也不需要分词,也不需要储存的字段,由于这样的字段在Lucene中不经意义。

示范性配备:

 

动态性域的特性配备跟一般的 field 差很少就很少说了,唯一有点差别就是 name 的特性值,能够用通配符,这样便可以模糊不清配对多个域啦,这样设计方案的目地就是无需经常的去改动大家的 schema.xml 中的 field 配备去提升 field 域啦,例如之前有个 link_s域,某一天你想再提升一个 url_s 域,那你就需要去改动 schema.xml 配备文档,因为schema.xml 改动之后需要重新启动 tomcat 才可以起效,重新启动即意味着程序的终断,这常常是不能接纳的。因此引入动态性域来防止经常加上改动域,但前提条件是你的域需要合乎你提早界定的动态性域的网站域名称取名标准哦。


提议创建一个复制字段,将全部的 全文字 字段拷贝到一个字段中,以便开展统一的查找。

例如:

复制字段就是查寻的情况下无需再键入:title:张三 and content:张三的本人简介。立即能够键入"张三"便可以将“姓名”含“张三”或“简介”中含“张三”的查寻出来。他将需要查寻的內容放在了一个字段中,而且默认设置查寻该字段设为该字段就可以了。 

要留意的是,假如你只是拷贝单独域,那末假如你被拷贝域自身就是多值域,那末总体目标域也是多值域,这无庸质疑,那假如你拷贝的是多个域,要是在其中有一个域是多值域,那末总体目标域就一定是多值域,这点一定要切记。

field 说完了,接着说说 fieldType 元素,它用来界定域种类, solr 内嵌的域种类有StrField , BoolField , TrieIntField , TrieFloatField , TrieLongField ,TrieDoubleField , TrieDateField , BinaryField , RandomSortField , TextField等,别的更多域种类请自身查阅 Solr API 文本文档。 


StrField: 这是一个分不清词的标识符串域,它适用 docValues 域,但当为其加上了docValues 域,则要求只能是单值域且该域务必存在或该域有默认设置值 BoolField : boolean 域,对应 true/false TrieIntField, TrieFloatField, TrieLongField, TrieDoubleField 这几个都是默认设置的数据域, precisionStep 特性一般用于数据范畴查寻, precisionStep 值越小,则数据库索引时该域的域值分出的 token 个数越多,会增大硬盘上数据库索引的体积,但它会加速数据范畴查找的响应速度, positionIncrementGap 特性表明假如当今域是多值域时,多个值之间的间距,单值域,设定此项不经意义。 TrieDateField :明显这是一个时间域种类,但是遗憾的是它适用 1995⑿-31TZ 这类文件格式的时间,比较坑爹,为此我自定了一个 TrieCNDateField 域种类,用于适用国人比较喜爱的 yyyy-MM-dd HH:mm:ss 文件格式的时间。源代码请参照我的 ---------

金融企业网站建设

------------


Copyright © 广州凡科互联网科技有限公司 版权所有 粤ICP备10235580号
全国服务电话:4000-399-000   传真:021-45545458
公司地址:广州市海珠区工业大道北67号凤凰创意园