W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Tokenizer 負責將字段數(shù)據(jù)分解為詞法單位或標記。
本節(jié)將介紹以下的 Tokenizer:
您可以在 schema.xml 中使用 <tokenizer> 元素(作為 <analyzer> 的子級)將文本字段類型的 tokenizer 配置:
<fieldType name="text" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
</fieldType>
類屬性命名一個工廠類,它將在需要時實例化一個 tokenizer 對象。Tokenizer 工廠類實現(xiàn) org.apache.solr.analysis.TokenizerFactory。TokenizerFactory 的create() 方法接受一個 Reader 并返回一個 TokenStream。當 Solr 創(chuàng)建 tokenizer 時,它傳遞一個 Reader 對象來提供文本字段的內(nèi)容。
通過設(shè)置 <tokenizer> 元素的屬性,可以將參數(shù)傳遞給 tokenizer 工廠。
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="; "/>
</analyzer>
</fieldType>
以下各節(jié)介紹此版本 Solr 中包含的 tokenizer 工廠類。
有關(guān) Solr 的 tokenizers 的用戶提示,請參閱:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters。
該 tokenizer 將文本字段分割為標記,將空格和標點符號作為分隔符。分隔符字符被丟棄,但以下情況除外:
請注意,單詞是以連字符分隔的。
標準分詞器支持 Unicode 標準附件 UAX#29 字邊界,并且使用下列標記類型:<ALPHANUM>、<NUM>、<SOUTHEAST_ASIAN>、<IDEOGRAPHIC> 和<HIRAGANA>。
工廠類: solr.StandardTokenizerFactory
參數(shù):
maxTokenLength:(整數(shù),默認值為255)Solr 忽略超過由 maxTokenLength 指定的字符數(shù)的標記。
例如:
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
輸入: "Please, email john.doe@foo.com by 03-09, re: m37-xq."
輸出: "Please", "email", "john.doe", "foo.com", "by", "03", "09", "re", "m37", "xq"
經(jīng)典 Tokenizer 保留與 Solr 版本3.1和之前的標準 Tokenizer 相同的行為。它不使用標準 Tokenizer 使用的 Unicode 標準附錄 UAX#29 字邊界規(guī)則。該 tokenizer將文本字段分割為標記,將空格和標點符號作為分隔符。分隔符字符被丟棄,但以下情況除外:
工廠類: solr.ClassicTokenizerFactory
參數(shù):
maxTokenLength:(整數(shù),默認值為 255)Solr 忽略超過由 maxTokenLength 指定的字符數(shù)的標記。
例如:
<analyzer>
<tokenizer class="solr.ClassicTokenizerFactory"/>
</analyzer>
輸出:"Please, email john.doe@foo.com by 03-09, re: m37-xq."
輸入:"Please", "email", "john.doe@foo.com", "by", "03-09", "re", "m37-xq"
這個 tokenizer 將整個文本字段視為單個標記。
工廠類: solr.KeywordTokenizerFactory
參數(shù):無
示例:
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
輸入:"Please, email john.doe@foo.com by 03-09, re: m37-xq."
輸出: "Please, email john.doe@foo.com by 03-09, re: m37-xq."
該 tokenizer 從連續(xù)字母串創(chuàng)建標記,丟棄所有非字母字符。
工廠類: solr.LetterTokenizerFactory
參數(shù):無
示例:
<analyzer>
<tokenizer class="solr.LetterTokenizerFactory"/>
</analyzer>
輸入: "I can’t."
輸出:"I", "can", "t"
通過以非字母分隔的方式標記輸入流,然后將所有字母轉(zhuǎn)換為小寫??瞻缀头亲帜副粊G棄。
工廠類: solr.LowerCaseTokenizerFactory
參數(shù):無
示例:
<analyzer>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
輸入: "I just *LOVE* my iPhone!"
輸出: "i", "just", "love", "my", "iphone"
讀取字段文本并在給定范圍內(nèi)生成大小為 n-gram 的記號。
工廠類: solr.NGramTokenizerFactory
參數(shù):
minGramSize:(整數(shù),默認1)最小 n-gram 大小,必須> 0。
maxGramSize:(整數(shù),默認2)最大 n-gram 大小,必須> = minGramSize。
示例:
默認行為。請注意,這個 tokenizer 操作整個領(lǐng)域。它不會在空格處破壞字段。因此,空格字符被包括在編碼中。
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>
輸入:"hey man"
輸出:"h", "e", "y", " ", "m", "a", "n", "he", "ey", "y ", " m", "ma", "an"
示例:
n-gram 大小范圍為4到5:
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="4" maxGramSize="5"/>
</analyzer>
輸入:"bicycle"
輸出:"bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"
讀取字段文本并在給定范圍內(nèi)生成大小的邊緣 n-gram 標記。
工廠類: solr.EdgeNGramTokenizerFactory
參數(shù):
minGramSize:(整數(shù),默認值為1)最小 n-gram 大小,必須> 0。
maxGramSize:(整數(shù),默認值為1)最大 n-gram 大小,必須> = minGramSize。
side:("front" 或 "back",默認為"front")是否從文本的開頭 (front) 或從末尾 (back) 計算 n-gram。
示例:
默認行為(最小值和最大值默認為1):
<analyzer>
<tokenizer class="solr.EdgeNGramTokenizerFactory"/>
</analyzer>
輸入: “babaloo”
輸出: “b”
示例:
邊緣 n-gram 范圍為2到5
<analyzer>
<tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5"/>
</analyzer>
輸入: “babaloo”
輸出: “ba”,“bab”,“baba”,“babal”
示例:
邊緣 n-gram 范圍從2到5,從背面:
<analyzer>
<tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5" side="back"/>
</analyzer>
輸入: “babaloo”
輸出: “oo”,“l(fā)oo”,“aloo”,“baloo”
這個 tokenizer 處理多語言文本,并根據(jù)其腳本屬性對其進行標記。
您可以通過指定每個腳本規(guī)則文件來自定義此標記器的行為。要添加每個腳本規(guī)則,請?zhí)砑右粋€ rulefiles 參數(shù),該參數(shù)應(yīng)包含以下格式的 code:rulefile 對的逗號分隔列表對象:四個字母的 ISO 15924 腳本代碼,后跟一個冒號,然后是一個資源路徑。例如,要指定 Latin(腳本代碼 “Latn”)和 Cyrillic(腳本代碼 “Cyrl”)的規(guī)則,您可以輸入:Latn:my.Latin.rules.rbbi,Cyrl:my.Cyrillic.rules.rbbi。
solr.ICUTokenizerFactory 的默認配置提供了 UAX#29 的分詞規(guī)則標記(如 solr.StandardTokenizer),但也包括自定義定制為 Hebrew(專門處理雙引號和單引號),為 Khmer,Lao 和 Myanmar 的音節(jié)標記,并對CJK字符進行基于字典的分詞。
工廠類: solr.ICUTokenizerFactory
參數(shù):
rulefile:以下格式的 code:rulefile 對的逗號分隔列表對象:四個字母的 ISO 15924 腳本代碼,后跟一個冒號,然后是一個資源路徑。
示例:
<analyzer>
<!-- no customization -->
<tokenizer class="solr.ICUTokenizerFactory"/>
</analyzer>
<analyzer>
<tokenizer class="solr.ICUTokenizerFactory"
rulefiles="Latn:my.Latin.rules.rbbi,Cyrl:my.Cyrillic.rules.rbbi"/>
</analyzer>
要使用此 tokenizer,您必須將其他 . jar 添加到 Solr 的類路徑中 (如 SolrConfig 中的 Lib 指令中所述)。有關(guān)需要添加到您的 SOLR_HOME/lib 的 jar 的信息,請參見 solr/contrib/analysis-extras/README.txt。
這個 tokenizer 從文件路徑層次結(jié)構(gòu)中創(chuàng)建同義詞。
工廠類: solr.PathHierarchyTokenizerFactory
參數(shù):
delimiter:(字符,無默認值)您可以指定文件路徑分隔符并將其替換為您提供的分隔符。這對于使用反斜線分隔符是非常有用的。
replace:(字符,無默認值)指定 Solr 在標記化輸出中使用的分隔符。
示例:
<fieldType name="text_path" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="\" replace="/"/>
</analyzer>
</fieldType>
輸入: “c:\ usr \ local \ apache”
輸出: “c:”,“c:/ usr”,“c:/ usr / local”,“c:/ usr / local / apache”
該 tokenizer 使用 Java 正則表達式將輸入文本流分解為標記。由 pattern 參數(shù)提供的表達式可以被解釋為分隔符,或者匹配應(yīng)該從文本中提取的作為記號的模式。
有關(guān) Java 正則表達式語法的更多信息,請參閱 Javadocsjava.util.regex.Pattern。
工廠類: solr.PatternTokenizerFactory
參數(shù):
pattern:(必需的)正則表達式,如 java.util.regex.Pattern 中所定義。
group:(可選,默認為-1)指定要將哪個正則表達式組提取為標記。值-1意味著正則表達式應(yīng)被視為分隔符的分隔符。非負數(shù)組(> = 0)表示匹配該正則表達式組的字符序列應(yīng)轉(zhuǎn)換為令牌。組0指整個正則表達式,大于零的組引用正則表達式的帶括號的子表達式,從左到右計數(shù)。
示例:
用逗號分隔的列表。令牌由一系列零個或多個空格,一個逗號和零個或多個空格分隔。
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="\s*,\s*"/>
</analyzer>
輸入:"fee,fie, foe , fum, foo"
輸出:"fee", "fie", "foe", "fum", "foo"
示例:
提取簡單的大寫單詞。至少一個大寫字母后跟零個或多個字母的序列被提取為一個標記。
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="[A-Z][A-Za-z]*" group="0"/>
</analyzer>
輸入: "Hello. My name is Inigo Montoya. You killed my father. Prepare to die."
輸出:"Hello", "My", "Inigo", "Montoya", "You", "Prepare"
示例:
使用可選的分號分隔符提取以 “SKU”、“Part”或 “Part Number” 開頭的零件號碼,區(qū)分大小寫。部件號必須是全部數(shù)字,并帶有可選的連字符。正則表達式捕獲組通過從左到右計算左括號進行編號。組3是子表達式“[0-9 - ] +”,它匹配一個或多個數(shù)字或連字符。
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="(SKU|Part(\sNumber)?):?\s(\[0-9-\]+)" group="3"/>
</analyzer>
輸入: "SKU: 1234, Part Number 5678, Part: 126-987"
輸出: "1234", "5678", "126-987"
這個 tokenizer 類似于上面描述的 PatternTokenizerFactory,但是使用 Lucene RegExp 模式匹配為輸入流構(gòu)造不同的標記。語法比 PatternTokenizerFactory 限制更多,但是標記化速度要快得多。
工廠類: solr.SimplePatternTokenizerFactory
參數(shù):
pattern:(必需)在 RegExpjavadoc 中定義的正則表達式,標識要包含在標記中的字符。這個匹配是貪婪的,這樣就可以創(chuàng)建一個給定點上最長的令牌匹配。空令牌永遠不會被創(chuàng)建。
maxDeterminizedStates:(可選,默認為10000)由 regexp 計算的確定自動機的總狀態(tài)計數(shù)限制。
示例:
匹配由簡單的空格字符分隔的令牌:
<analyzer>
<tokenizer class="solr.SimplePatternTokenizerFactory" pattern="[^ \t\r\n]+"/>
</analyzer>
這個 tokenizer 類似于上面描述的 SimplePatternTokenizerFactory,但是使用 Lucene RegExp 模式匹配來標識應(yīng)該用于分割標記的字符序列。語法比 PatternTokenizerFactory 限制更多,但是標記化速度要快得多。
工廠類: solr.SimplePatternSplitTokenizerFactory
參數(shù):
pattern:(必需)在 RegExpjavadocs 中定義的正則表達式,標識應(yīng)該分割記號的字符。該匹配是貪婪的,使得在給定點匹配最長的令牌分隔符匹配??樟钆朴肋h不會被創(chuàng)建。
maxDeterminizedStates:(可選,默認為10000)由 regexp 計算的確定自動機的總狀態(tài)計數(shù)限制。
示例:
匹配由簡單的空格字符分隔的令牌:
<analyzer>
<tokenizer class="solr.SimplePatternSplitTokenizerFactory" pattern="[ \t\r\n]+"/>
</analyzer>
該 tokenizer 將文本字段分割為標記,將空格和標點符號作為分隔符。分隔符字符被丟棄,但以下情況除外:
該 UAX29 URL 的電子郵件標記生成器支持 Unicode 標準附件 UAX#29 字邊界與以下標記類型:<ALPHANUM>、<NUM>、<URL>、<EMAIL>、<SOUTHEAST_ASIAN>、<IDEOGRAPHIC> 和 <HIRAGANA>。
工廠類: solr.UAX29URLEmailTokenizerFactory
參數(shù):
maxTokenLength:(整數(shù),默認值為255)Solr 忽略超過由 maxTokenLength 指定的字符數(shù)的標記。
示例:
<analyzer>
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
</analyzer>
輸入:"Visit http://accarol.com/contact.htm?from=external&a=10 or e-mail bob.cratchet@accarol.com"
輸出: "Visit", "http://accarol.com/contact.htm?from=external&a=10", "or", "e", "mail", "bob.cratchet@accarol.com"
簡單的 tokenizer,將文本流分割成空白字符,并返回非空白字符序列作為標記。請注意,標記中將包含任何標點符號。
工廠類: solr.WhitespaceTokenizerFactory
參數(shù):: rule 指定如何為標記化目的定義空白。有效值如下:
示例:
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" rule="java" />
</analyzer>
輸入:"To be, or what?"
輸出:"To", "be,", "or", "what?"
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: