久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

solr schema.xml和solrconfig.xml怎么配置

共計(jì) 9874 個(gè)字符,預(yù)計(jì)需要花費(fèi) 25 分鐘才能閱讀完成。

這篇文章主要介紹“solr schema.xml 和 solrconfig.xml 怎么配置”,在日常操作中,相信很多人在 solr schema.xml 和 solrconfig.xml 怎么配置問(wèn)題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”solr schema.xml 和 solrconfig.xml 怎么配置”的疑惑有所幫助!接下來(lái),請(qǐng)跟著丸趣 TV 小編一起來(lái)學(xué)習(xí)吧!

一、字段配置(schema)

schema.xml 位于 solr/conf/ 目錄下,類(lèi)似于數(shù)據(jù)表配置文件,

定義了加入索引的數(shù)據(jù)的數(shù)據(jù)類(lèi)型,主要包括 type、fields 和其他的一些缺省設(shè)置。

1、先來(lái)看下 type 節(jié)點(diǎn),這里面定義 FieldType 子節(jié)點(diǎn),包括 name,class,positionIncrementGap 等一些參數(shù)。

name:就是這個(gè) FieldType 的名稱(chēng)。

class:指向 org.apache.solr.analysis 包里面對(duì)應(yīng)的 class 名稱(chēng),用來(lái)定義這個(gè)類(lèi)型的行為。

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è)類(lèi)型的數(shù)據(jù)在建立索引和進(jìn)行查詢(xún)的時(shí)候要使用的分析器 analyzer,包括分詞和過(guò)濾,如下:

view plain print ?

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 類(lèi)型的索引時(shí),Solr 會(huì)首先用空格進(jìn)行分詞  

  然后把分詞結(jié)果依次使用指定的過(guò)濾器進(jìn)行過(guò)濾,最后剩下的結(jié)果,才會(huì)加入到索引庫(kù)中以備查詢(xún)。 

  注意: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)定義具體的字段(類(lèi)似數(shù)據(jù)庫(kù)的字段),含有以下屬性:

name:字段名

type:之前定義過(guò)的各種 FieldType

indexed:是否被索引

stored:是否被存儲(chǔ)(如果不需要存儲(chǔ)相應(yīng)字段值,盡量設(shè)為 false)

multiValued:是否有多個(gè)值(對(duì)可能存在多值的字段盡量設(shè)置為 true,避免建索引時(shí)拋出錯(cuò)誤)

view plain print ?

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è)置:

view plain print ?

copyField source = name dest = all /

copyField source = summary dest = all /

4、動(dòng)態(tài)字段,沒(méi)有具體名稱(chēng)的字段,用 dynamicField 字段

如:name 為 *_i,定義它的 type 為 int,那么在使用這個(gè)字段的時(shí)候,任務(wù)以_i 結(jié)果的字段都被認(rèn)為符合這個(gè)定義。如 name_i, school_i

view plain print ?

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 編寫(xiě)的客戶(hù)端與 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 開(kāi)始的,都是在 org.appache.solr.analysis 包下)

可選的屬性:

sortMissingLast 和 sortMissingFirst 兩個(gè)屬性是用在可以?xún)?nèi)在使用 String 排序的類(lèi)型上(包括: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 類(lèi)型不被分析,而是被逐字地索引 / 存儲(chǔ)。

StrField 和 TextField 都有一個(gè)可選的屬性“compressThreshold”,保證壓縮到不小于一個(gè)大小(單位:char)

fieldType name = text class = solr.TextField positionIncrementGap = 100

solr.TextField 允許用戶(hù)通過(guò)分析器來(lái)定制索引和查詢(xún),分析器包括一個(gè)分詞器(tokenizer)和多個(gè)過(guò)濾器(filter)

positionIncrementGap:可選屬性,定義在同一個(gè)文檔中此類(lèi)型數(shù)據(jù)的空白間隔,避免短語(yǔ)匹配錯(cuò)誤。

name:  字段類(lèi)型名  
class:  java 類(lèi)名  
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:先前定義的類(lèi)型。

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ǔ)開(kāi)銷(xiāo)。

termOffsets:存儲(chǔ) term vector 的偏移量,會(huì)消耗存儲(chǔ)開(kāi)銷(xiāo)。

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í),必須填寫(xiě)這個(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。

二、solrconfig.xml

1、索引配置

mainIndex 標(biāo)記段定義了控制 Solr 索引處理的一些因素.

useCompoundFile:通過(guò)將很多 Lucene 內(nèi)部文件整合到單一一個(gè)文件來(lái)減少使用中的文件的數(shù)量。這可有助于減少 Solr 使用的文件句柄數(shù)目,代價(jià)是降低了性能。除非是應(yīng)用程序用完了文件句柄,否則 false 的默認(rèn)值應(yīng)該就已經(jīng)足夠。

useCompoundFile:通過(guò)將很多 Lucene 內(nèi)部文件整合到一個(gè)文件,來(lái)減少使用中的文件的數(shù)量。這可有助于減少 Solr 使用的文件句柄的數(shù)目,代價(jià)是降低了性能。除非是應(yīng)用程序用完了文件句柄,否則 false 的默認(rèn)值應(yīng)該就已經(jīng)足夠了。

mergeFacor:決定 Lucene 段被合并的頻率。較小的值(最小為 2)使用的內(nèi)存較少但導(dǎo)致的索引時(shí)間也更慢。較大的值可使索引時(shí)間變快但會(huì)犧牲較多的內(nèi)存。(典型的時(shí)間與空間 的平衡配置)

maxBufferedDocs:在合并內(nèi)存中文檔和創(chuàng)建新段之前,定義所需索引的最小文檔數(shù)。段是用來(lái)存儲(chǔ)索引信息的 Lucene 文件。較大的值可使索引時(shí)間變快但會(huì)犧牲較多內(nèi)存。

maxMergeDocs:控制可由 Solr 合并的 Document 的最大數(shù)。較小的值(10,000)最適合于具有大量更新的應(yīng)用程序。

maxFieldLength:對(duì)于給定的 Document,控制可添加到 Field 的最大條目數(shù),進(jìn)而階段該文檔。如果文檔可能會(huì)很大,就需要增加這個(gè)數(shù)值。然后,若將這個(gè)值設(shè)置得過(guò)高會(huì)導(dǎo)致內(nèi)存不足錯(cuò)誤。

unlockOnStartup:告知 Solr 忽略在多線程環(huán)境中用來(lái)保護(hù)索引的鎖定機(jī)制。在某些情況下,索引可能會(huì)由于不正確的關(guān)機(jī)或其他錯(cuò)誤而一直處于鎖定,這就妨礙了添加和更新。將其設(shè)置為 true 可以禁用啟動(dòng)索引,進(jìn)而允許進(jìn)行添加和更新。(鎖機(jī)制)

2、查詢(xún)處理配置

query 標(biāo)記段中以下一些與緩存無(wú)關(guān)的特性:

maxBooleanClauses:定義可組合在一起形成以個(gè)查詢(xún)的字句數(shù)量的上限。正常情況 1024 已經(jīng)足夠。如果應(yīng)用程序大量使用了通配符或范圍查詢(xún),增加這個(gè)限制將能避免當(dāng)值超出時(shí),拋出 TooMangClausesException。

enableLazyFieldLoading:如果應(yīng)用程序只會(huì)檢索 Document 上少數(shù)幾個(gè) Field,那么可以將這個(gè)屬性設(shè)置為 true。懶散加載的一個(gè)常見(jiàn)場(chǎng)景大都發(fā)生在應(yīng)用程序返回一些列搜索結(jié)果的時(shí)候,用戶(hù)常常會(huì)單擊其中的一個(gè)來(lái)查看存儲(chǔ)在此索引中的原始文檔。初始的現(xiàn)實(shí)常常只需要現(xiàn)實(shí)很短的一段信息。若是檢索大型的 Document,除非必需,否則就應(yīng)該避免加載整個(gè)文檔。

query 部分負(fù)責(zé)定義與在 Solr 中發(fā)生的時(shí)間相關(guān)的幾個(gè)選項(xiàng):

概念:Solr(實(shí)際上是 Lucene)使用稱(chēng)為 Searcher 的 Java 類(lèi)來(lái)處理 Query 實(shí)例。Searcher 將索引內(nèi)容相關(guān)的數(shù)據(jù)加載到內(nèi)存中。根據(jù)索引、CPU 已經(jīng)可用內(nèi)存的大小,這個(gè)過(guò)程可能需要較長(zhǎng)的一段時(shí)間。要改進(jìn)這一設(shè)計(jì)和顯著提高性能,Solr 引入了一張“溫暖”策略,即把這些新的 Searcher 聯(lián)機(jī)以便為現(xiàn)場(chǎng)用戶(hù)提供查詢(xún)服務(wù)之前,先對(duì)它們進(jìn)行“熱身”。

newSearcher 和 firstSearcher 事件,可以使用這些事件來(lái)制定實(shí)例化新 Searcher 或第一個(gè) Searcher 時(shí),應(yīng)該執(zhí)行哪些查詢(xún)。如果應(yīng)用程序期望請(qǐng)求某些特定的查詢(xún),那么在創(chuàng)建新 Searcher 或第一個(gè) Searcher 時(shí)就應(yīng)該反注釋這些部分并執(zhí)行適當(dāng)?shù)牟樵?xún)。

query 中的智能緩存:

filterCache:通過(guò)存儲(chǔ)一個(gè)匹配給定查詢(xún)的文檔 id 的無(wú)序集,過(guò)濾器讓 Solr 能夠有效提高查詢(xún)的性能。緩存這些過(guò)濾器意味著對(duì) Solr 的重復(fù)調(diào)用可以導(dǎo)致結(jié)果集的快速查找。更常見(jiàn)的場(chǎng)景是緩存一個(gè)過(guò)濾器,然后再發(fā)起后續(xù)的精煉查詢(xún),這種查詢(xún)能使用過(guò)濾器來(lái)限制要搜索的文檔數(shù)。

queryResultCache:為查詢(xún)、排序條件和所請(qǐng)求文檔的數(shù)量緩存文檔 id 的有序集合。

documentCache:緩存 Lucene Document,使用內(nèi)部 Lucene 文檔 id(以便不與 Solr 唯一 id 相混淆)。由于 Lucene 的內(nèi)部 Document id 可以因索引操作而更改,這種緩存不能自熱。

Named caches:命名緩存是用戶(hù)定義的緩存,可被 Solr 定制插件 所使用。

其中 filterCache、queryResultCache、Named caches(如果實(shí)現(xiàn)了 org.apache.solr.search.CacheRegenerator)可以自熱。

每個(gè)緩存聲明都接受最多四個(gè)屬性:

class:是緩存實(shí)現(xiàn)的 Java 名

size:是最大的條目數(shù)

initialSize:是緩存的初始大小

autoWarmCount:是取自舊緩存以預(yù)熱新緩存的條目數(shù)。如果條目很多,就意味著緩存的 hit 會(huì)更多,只不過(guò)需要花更長(zhǎng)的預(yù)熱時(shí)間。

對(duì)于所有緩存模式而言,在設(shè)置緩存參數(shù)時(shí),都有必要在內(nèi)存、cpu 和磁盤(pán)訪問(wèn)之間進(jìn)行均衡。統(tǒng)計(jì)信息管理頁(yè)(管理員界面的 Statistics)對(duì)于分析緩存的 hit-to-miss 比例以及微調(diào)緩存大小的統(tǒng)計(jì)數(shù)據(jù)都非常有用。而且,并非所有應(yīng)用程序都會(huì)從緩存受益。實(shí)際上,一些應(yīng)用程序反而會(huì)由于需要將某個(gè)永遠(yuǎn)也用不到的條目存儲(chǔ)在緩存中這一額外步驟而受到影響。

到此,關(guān)于“solr schema.xml 和 solrconfig.xml 怎么配置”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)9874字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 察雅县| 咸阳市| 永川市| 蒙山县| 商城县| 瓮安县| 上林县| 丹江口市| 新蔡县| 阿图什市| 丁青县| 汤原县| 韶关市| 安达市| 新邵县| 康乐县| 肥西县| 临清市| 湟源县| 明光市| 光山县| 封开县| 双牌县| 瓮安县| 揭东县| 金乡县| 绥江县| 南丹县| 师宗县| 涪陵区| 厦门市| 博罗县| 宁波市| 朝阳市| 综艺| 咸宁市| 南汇区| 普兰县| 兴山县| 洛南县| 遂溪县|