Solr配置文件schema.xml的內(nèi)容是什么

這篇文章主要介紹了Solr配置文件schema.xml的內(nèi)容是什么,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供新興企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、H5場(chǎng)景定制、小程序制作等業(yè)務(wù)。10年已為新興眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

一、字段配置(schema)
    schema.xml位于solr/collection1/conf/目錄下,類似于數(shù)據(jù)表配置文件,
    定義了加入索引的數(shù)據(jù)的數(shù)據(jù)類型,主要包括type、fields和其他的一些缺省設(shè)置。

    1、先來(lái)看下type節(jié)點(diǎn),這里面定義FieldType子節(jié)點(diǎn),包括name,class,positionIncrementGap等一些參數(shù)。
        name:就是這個(gè)FieldType的名稱。
        class:指向org.apache.solr.analysis包里面對(duì)應(yīng)的class名稱,用來(lái)定義這個(gè)類型的行為。
        <schema name="example" version="1.2"> 
            <types> 
                <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
                <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true" /> 
                <fieldtype name="binary" class="solr.BinaryField" /> 
                <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="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
                <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
                ...  
           </ types > 
           ...  
        </ schema >  

        必要的時(shí)候fieldType還需要自己定義這個(gè)類型的數(shù)據(jù)在建立索引和進(jìn)行查詢的時(shí)候要使用的分析器analyzer,包括分詞和過(guò)濾,如下:
        <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> 
            <analyzer> 
                <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
            </analyzer > 
        </fieldType > 
        <fieldType name="text" class="solr.TextField" positionIncrementGap="100" > 
            <analyzer type="index" > 
                <!--
                這個(gè)分詞包是空格分詞,在向索引庫(kù)添加text類型的索引時(shí),Solr會(huì)首先用空格進(jìn)行分詞
                然后把分詞結(jié)果依次使用指定的過(guò)濾器進(jìn)行過(guò)濾,最后剩下的結(jié)果,才會(huì)加入到索引庫(kù)中以備查詢。  
                注意:Solr的analysis包并沒(méi)有帶支持中文的包,需要自己添加中文分詞器,google下。  
                --> 
                <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
                <!-- in this example, we will only use synonyms at query time  
                <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false" /> 
                --> 
                <!-- Case insensitive stop word removal.  
                  add enablePositionIncrements=true  in both the index and query  
                  analyzers to leave a 'gap' for more accurate phrase queries.  
                --> 
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" /> 
                <filter class="solr.LowerCaseFilterFactory" /> 
                <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" /> 
            </analyzer > 
            <analyzer type="query" > 
                <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" /> 
                <filter class="solr.LowerCaseFilterFactory" /> 
                <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" /> 
            </analyzer > 
        </fieldType >  


    2、再來(lái)看下fields節(jié)點(diǎn)內(nèi)定義具體的字段(類似數(shù)據(jù)庫(kù)的字段),含有以下屬性:
        name:字段名
        type:之前定義過(guò)的各種FieldType
        indexed:是否被索引
        stored:是否被存儲(chǔ)(如果不需要存儲(chǔ)相應(yīng)字段值,盡量設(shè)為false)
        multiValued:是否有多個(gè)值(對(duì)可能存在多值的字段盡量設(shè)置為true,避免建索引時(shí)拋出錯(cuò)誤)
        <fields> 
            <field name="id" type="integer" indexed="true" stored="true" required="true" /> 
            <field name="name" type="text" indexed="true" stored="true" /> 
            <field name="summary" type="text" indexed="true" stored="true" /> 
            <field name="author" type="string" indexed="true" stored="true" /> 
            <field name="date" type="date" indexed="false" stored="true" /> 
            <field name="content" type="text" indexed="true" stored="false" /> 
            <field name="keywords" type="keyword_text" indexed="true" stored="false" multiValued="true" /> 
            <!--拷貝字段--> 
            <field name="all" type="text" indexed="true" stored="false" multiValued="true" /> 
        </fields>  

 
    3、建議建立一個(gè)拷貝字段,將所有的全文本字段復(fù)制到一個(gè)字段中,以便進(jìn)行統(tǒng)一的檢索:
        以下是拷貝設(shè)置:
        <copyField source="name" dest="all" /> 
        <copyField source="summary" dest="all" />  

    
    4、動(dòng)態(tài)字段,沒(méi)有具體名稱的字段,用dynamicField字段
        如:name為*_i,定義它的type為int,那么在使用這個(gè)字段的時(shí)候,任務(wù)以_i結(jié)果的字段都被認(rèn)為符合這個(gè)定義。如name_i, school_i
        <dynamicField name="*_i"  type="int"  indexed="true"  stored="true" /> 
        <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" /> 
        <dynamicField name="*_l"  type="long"   indexed="true"  stored="true" /> 
        <dynamicField name="*_t"  type="text"  indexed="true"  stored="true" /> 
        <dynamicField name="*_b"  type="boolean" indexed="true"  stored="true" /> 
        <dynamicField name="*_f"  type="float"  indexed="true"  stored="true" /> 
        <dynamicField name="*_d"  type="double" indexed="true"  stored="true" /> 
        <dynamicField name="*_dt" type="date"  indexed="true"  stored="true" />  


        
schema.xml文檔注釋中的信息:
    1、為了改進(jìn)性能,可以采取以下幾種措施:
        將所有只用于搜索的,而不需要作為結(jié)果的field(特別是一些比較大的field)的stored設(shè)置為false
        將不需要被用于搜索的,而只是作為結(jié)果返回的field的indexed設(shè)置為false
        刪除所有不必要的copyField聲明
        為了索引字段的最小化和搜索的效率,將所有的 text fields的index都設(shè)置成field,然后使用copyField將他們都復(fù)制到一個(gè)總的 text field上,然后對(duì)他進(jìn)行搜索。
        為了最大化搜索效率,使用java編寫的客戶端與solr交互(使用流通信)
        在服務(wù)器端運(yùn)行JVM(省去網(wǎng)絡(luò)通信),使用盡可能高的Log輸出等級(jí),減少日志量。
    2、<schema name="example" version="1.2">
        name:標(biāo)識(shí)這個(gè)schema的名字
        version:現(xiàn)在版本是1.2

    3、filedType
        <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
        name:標(biāo)識(shí)而已。
        class和其他屬性決定了這個(gè)fieldType的實(shí)際行為。(class以solr開始的,都是在org.appache.solr.analysis包下)
        可選的屬性:
        sortMissingLast和sortMissingFirst兩個(gè)屬性是用在可以內(nèi)在使用String排序的類型上(包括:string,boolean,sint,slong,sfloat,sdouble,pdate)。
        sortMissingLast="true",沒(méi)有該field的數(shù)據(jù)排在有該field的數(shù)據(jù)之后,而不管請(qǐng)求時(shí)的排序規(guī)則。
        sortMissingFirst="true",跟上面倒過(guò)來(lái)唄。
        2個(gè)值默認(rèn)是設(shè)置成false
        StrField類型不被分析,而是被逐字地索引/存儲(chǔ)。
        StrField和TextField都有一個(gè)可選的屬性“compressThreshold”,保證壓縮到不小于一個(gè)大小(單位:char)
        <fieldType name="text" class="solr.TextField" positionIncrementGap="100" >
        solr.TextField 允許用戶通過(guò)分析器來(lái)定制索引和查詢,分析器包括一個(gè)分詞器(tokenizer)和多個(gè)過(guò)濾器(filter)
        positionIncrementGap:可選屬性,定義在同一個(gè)文檔中此類型數(shù)據(jù)的空白間隔,避免短語(yǔ)匹配錯(cuò)誤。
        name:  字段類型名 
        class:  java類名 
        indexed:  缺省true。 說(shuō)明這個(gè)數(shù)據(jù)應(yīng)被搜索和排序,如果數(shù)據(jù)沒(méi)有indexed,則stored應(yīng)是true。 
        stored:  缺省true。說(shuō)明這個(gè)字段被包含在搜索結(jié)果中是合適的。如果數(shù)據(jù)沒(méi)有stored,則indexed應(yīng)是true。 
        sortMissingLast:  指沒(méi)有該指定字段數(shù)據(jù)的document排在有該指定字段數(shù)據(jù)的document的后面 
        sortMissingFirst:  指沒(méi)有該指定字段數(shù)據(jù)的document排在有該指定字段數(shù)據(jù)的document的前面 
        omitNorms:  字段的長(zhǎng)度不影響得分和在索引時(shí)不做boost時(shí),設(shè)置它為true。一般文本字段不設(shè)置為true。 
        termVectors:  如果字段被用來(lái)做more like this 和highlight的特性時(shí)應(yīng)設(shè)置為true。 
        compressed:  字段是壓縮的。這可能導(dǎo)致索引和搜索變慢,但會(huì)減少存儲(chǔ)空間,只有StrField和TextField是可以壓縮,這通常適合字段的長(zhǎng)度超過(guò)200個(gè)字符。 
        multiValued:  字段多于一個(gè)值的時(shí)候,可設(shè)置為true。 
        positionIncrementGap:  和multiValued
        一起使用,設(shè)置多個(gè)值之間的虛擬空白的數(shù)量
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        空格分詞,精確匹配。
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
        在分詞和匹配時(shí),考慮 "-"連字符,字母數(shù)字的界限,非字母數(shù)字字符,這樣 "wifi"或"wi fi"都能匹配"Wi-Fi"。
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
        同義詞 
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        在禁用字(stopword)刪除后,在短語(yǔ)間增加間隔
        stopword:即在建立索引過(guò)程中(建立索引和搜索)被忽略的詞,比如is this等常用詞。在conf/stopwords.txt維護(hù)。

    4、fields
        <field name="id" type="string" indexed="true" stored="true" required="true" />
        name:標(biāo)識(shí)而已。
        type:先前定義的類型。
        indexed:是否被用來(lái)建立索引(關(guān)系到搜索和排序)
        stored:是否儲(chǔ)存
        compressed:[false],是否使用gzip壓縮(只有TextField和StrField可以壓縮)
        mutiValued:是否包含多個(gè)值
        omitNorms:是否忽略掉Norm,可以節(jié)省內(nèi)存空間,只有全文本field和need an index-time boost的field需要norm。(具體沒(méi)看懂,注釋里有矛盾)
        termVectors:[false],當(dāng)設(shè)置true,會(huì)存儲(chǔ) term vector。當(dāng)使用MoreLikeThis,用來(lái)作為相似詞的field應(yīng)該存儲(chǔ)起來(lái)。
        termPositions:存儲(chǔ) term vector中的地址信息,會(huì)消耗存儲(chǔ)開銷。
        termOffsets:存儲(chǔ) term vector 的偏移量,會(huì)消耗存儲(chǔ)開銷。
        default:如果沒(méi)有屬性需要修改,就可以用這個(gè)標(biāo)識(shí)下。
    
        <field name="text" type="text" indexed="true" stored="false" multiValued="true" />
        包羅萬(wàn)象(有點(diǎn)夸張)的field,包含所有可搜索的text fields,通過(guò)copyField實(shí)現(xiàn)。
        <copyField source="cat" dest="text" />
        <copyField source="name" dest="text" />
        <copyField source="manu" dest="text" />
        <copyField source="features" dest="text" />
        <copyField source="includes" dest="text" />
        在添加索引時(shí),將所有被拷貝field(如cat)中的數(shù)據(jù)拷貝到text field中
        作用:
        將多個(gè)field的數(shù)據(jù)放在一起同時(shí)搜索,提供速度
        將一個(gè)field的數(shù)據(jù)拷貝到另一個(gè),可以用2種不同的方式來(lái)建立索引。
        <dynamicField name="*_i" type="int" indexed="true" stored="true" />
        如果一個(gè)field的名字沒(méi)有匹配到,那么就會(huì)用動(dòng)態(tài)field試圖匹配定義的各種模式。
        "*"只能出現(xiàn)在模式的最前和最后
        較長(zhǎng)的模式會(huì)被先去做匹配
        如果2個(gè)模式同時(shí)匹配上,最先定義的優(yōu)先
        <dynamicField name="*" type="ignored" multiValued=" true" />
        如果通過(guò)上面的匹配都沒(méi)找到,可以定義這個(gè),然后定義個(gè)type,當(dāng)String處理。(一般不會(huì)發(fā)生)
        但若不定義,找不到匹配會(huì)報(bào)錯(cuò)。

    5、其他一些標(biāo)簽
        <uniqueKey > id </ uniqueKey >
        文檔的唯一標(biāo)識(shí), 必須填寫這個(gè)field(除非該field被標(biāo)記required="false"),否則solr建立索引報(bào)錯(cuò)。
        <defaultSearchField > text </ defaultSearchField >
        如果搜索參數(shù)中沒(méi)有指定具體的field,那么這是默認(rèn)的域。
        <solrQueryParser defaultOperator="OR" />
        配置搜索參數(shù)短語(yǔ)間的邏輯,可以是"AND|OR"。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Solr配置文件schema.xml的內(nèi)容是什么”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

當(dāng)前文章:Solr配置文件schema.xml的內(nèi)容是什么
本文路徑:http://muchs.cn/article6/pgohig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷服務(wù)器托管、動(dòng)態(tài)網(wǎng)站、電子商務(wù)、品牌網(wǎng)站制作、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司