W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
ExternalFileField 類型可以指定 Solr 索引之外的文件中字段的值。對于這樣的字段,該文件包含從鍵字段到字段值的映射。另一種方法是,如果在文檔中索引時不指定字段,Solr 將在外部文件中查找此字段的值。
Tip:外部字段不可搜索。它們只能用于函數(shù)查詢或顯示。有關函數(shù)查詢的詳細信息, 請參閱函數(shù)查詢一節(jié)。
對于您希望在許多文檔中更新特定字段的情況,ExternalFileField 類型非常方便,它比您要更新其余文檔的時間更頻繁。例如,假設您已經(jīng)根據(jù)視圖的數(shù)量實現(xiàn)了文檔等級。您可能需要每天或每小時更新所有文檔的等級,而文檔的其余內容可能會更少更新。如果沒有 ExternalFileField,則需要更新每個文檔才能更改排名。使用ExternalFileField 效率更高,因為特定字段的所有文檔值都存儲在外部文件中,可以根據(jù)需要隨時更新。
在 schema.xml 中,這個字段類型的定義可能如下所示:
<fieldType name="entryRankFile" keyField="pkId" defVal="0" stored="false" indexed="false" class="solr.ExternalFileField"/>
keyField 屬性定義了將在外部文件中定義的鍵。它通常是索引的唯一鍵,但只要 keyField 可以用來識別索引中的文檔就不需要。defVal 定義了一個默認值,如果外部文件中沒有特定文檔的條目,將使用該默認值。
該文件本身位于 Solr 的索引目錄中,默認情況下是 $SOLR_HOME/data。該文件的名稱應該是 external_fieldname_ 或 external_fieldname_.*。對于上面的例子,則文件可以被命名為 external_entryRankFile 或 external_entryRankFile.txt。
Tip:如果出現(xiàn)使用名稱模式.*(如.txt)的任何文件,則將使用最后一個 (按名稱排序后),并且將刪除以前的版本。此行為支持在可能無法覆蓋文件的系統(tǒng)上(例如,在 Windows 上,如果該文件正在使用中)的實現(xiàn)。
該文件包含將等號左邊的關鍵字段映射到右邊的值的條目。以下是一些示例條目:
doc33=1.414
doc34=3.14159
doc40=42
此文件中列出的鍵不需要是唯一的。不需要對該文件進行排序,但如果是的話,Solr 將能夠更快地執(zhí)行查找。
您可以定義一個事件偵聽器來重新加載外部文件,當搜索器重新加載或者當新的搜索器被啟動時。有關更多信息,請參閱 “Query-Related Listeners” 一節(jié),但 solrconfig. xml 中的示例定義可能如下所示:
<listener event="newSearcher" class="org.apache.solr.schema.ExternalFileFieldReloader"/>
<listener event="firstSearcher" class="org.apache.solr.schema.ExternalFileFieldReloader"/>
PreAnalyzedField 類型提供了一種方法發(fā)送到 Solr 序列化的標記流,可選地使用字段的獨立存儲值,并且存儲和索引這些信息,而不需要在 Solr 中應用任何附加的文本處理。如果用戶希望提交已經(jīng)被一些現(xiàn)有的外部文本處理管道處理的字段內容(例如,已經(jīng)被標記化、注釋、詞干、同義詞插入等等),而使用 Lucene 的TokenStream 提供的所有豐富的屬性(每個令牌屬性)。
序列化格式可以使用 PreAnalyzedParser 接口的實現(xiàn)來插入。有兩個現(xiàn)成的實現(xiàn):
只有一個配置參數(shù) parserImpl。此參數(shù)的值應該是實現(xiàn) PreAnalyzedParser 接口的類的完全限定類名稱。這個參數(shù)的默認值是:org.apache.solr.schema.JsonPreAnalyzedParser。
默認情況下,這種類型的字段的查詢時間分析器將與 "索引時間分析器" 相同,后者需要序列化的分析文本。您必須將一個查詢類型分析器添加到您的 fieldType 中,以便對未預先分析的查詢執(zhí)行分析。在下面的例子中,索引時間分析器需要默認的 JSON 序列化格式,而查詢時間分析器將使用:StandardTokenizer / LowerCaseFilter:
<fieldType name="pre_with_query_analyzer" class="solr.PreAnalyzedField">
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
這是 PreAnalyzedField 類型使用的默認序列化格式。它使用帶有以下鍵的頂級 JSON 映射:
鍵 | 描述 | 是否需要 |
---|---|---|
|
版本密鑰。目前支持的版本是 |
需要 |
|
存儲字段的字符串值。您最多可以使用一個 |
可選的 |
|
存儲的字段的二進制值。二進制值必須是 Base64 編碼的。 |
可選的 |
|
序列化的令牌流。這是一個 JSON 列表。 |
可選的 |
任何其他頂級密鑰都將被忽略。
令牌流表示為 JSON 映射的 JSON 列表。每個令牌的映射由以下鍵和值組成:
鍵 | 描述 | Lucene屬性 | 值 | 是否需要 |
---|---|---|---|---|
|
令牌 |
CharTermAttribute |
表示當前令牌的 UTF-8 字符串 |
需要 |
|
起始偏移量 |
OffsetAttribute |
非負整數(shù) |
可選的 |
|
結束偏移量 |
OffsetAttribute |
非負整數(shù) |
可選的 |
|
位置增量 |
PositionIncrementAttribute |
非負整數(shù) - 默認是 |
可選的 |
|
有效載荷 |
PayloadAttribute |
Base64 編碼的有效載荷 |
可選的 |
|
詞法類型 |
TypeAttribute |
UTF-8 字符串 |
可選的 |
|
標志 |
的FlagsAttribute |
以十六進制格式表示整數(shù)值的字符串 |
可選的 |
任何其他的關鍵是默默的忽略。
{
"v":"1",
"str":"test ????ńó???",
"tokens": [
{"t":"one","s":123,"e":128,"i":22,"p":"DQ4KDQsODg8=","y":"word"},
{"t":"two","s":5,"e":8,"i":1,"y":"word"},
{"t":"three","s":20,"e":22,"i":1,"y":"foobar"}
]
}
通過 parserImpl 配置參數(shù)指定此格式時使用的完全限定類名為 org.apache.solr.schema.SimplePreAnalyzedParser。
這個解析器支持的序列化格式如下:
序列化格式:
content ::= version (stored)? tokens
version ::= digit+ " "
; stored field value - any "=" inside must be escaped!
stored ::= "=" text "="
tokens ::= (token ((" ") + token)*)*
token ::= text ("," attrib)*
attrib ::= name '=' value
name ::= text
value ::= text
“文本”值中的特殊字符可以使用轉義字符 '\' 進行轉義。以下轉義序列被識別:
EscapeSequence | 描述 |
---|---|
|
文字空間字符
|
|
文字 |
|
文字 |
|
文字 |
|
新行 |
|
回車 |
|
水平選項卡 |
請注意,不支持 Unicode 序列(例如,\u0001)。
以下標記屬性受支持,并用短符號名稱標識:
名稱 | 描述 | Lucene 屬性 | 值格式 |
---|---|---|---|
|
位置增量 |
PositionIncrementAttribute |
整數(shù) |
|
起始偏移量 |
OffsetAttribute |
整數(shù) |
|
結束偏移量 |
OffsetAttribute |
整數(shù) |
|
詞法類型 |
TypeAttribute |
字符串 |
|
標志 |
FlagsAttribute |
十六進制整數(shù) |
|
有效載荷 |
PayloadAttribute |
十六進制格式的字節(jié); 空白被忽略 |
令牌位置被跟蹤并隱式添加到令牌流中 - 開始和結束偏移量僅考慮文本和空白字段,并排除令牌屬性占用的空間。
1 one two three
1 one two three
1 one,s=123,e=128,i=22 two three,s=20,e=22
1 \ one\ \,,i=22,a=\, two\=
\n,\ =\ \
請注意,未知屬性及其值將被忽略,因此在本例中,第一個標記上的 “a” 屬性和第二個標記上的“”(轉義空間)屬性與它們的值一起被忽略,因為它們不在受支持的屬性名稱中。
1 ,i=22 ,i=33,s=2,e=20 ,
1 =This is the stored part with \=
\n \t escapes.=one two three
請注意,\t 在上面存儲的值不是文字;它顯示了以可視方式指示存儲值中的實際制表符字符的方法。
1 ==
1 =this is a test.=
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: