W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
分析器檢查字段的文本并生成令牌流。
Solr 分析器被指定為 schema.xml 配置文件中的<fieldType>元素的子元素(在與 solrconfig. xml 相同的 conf/ 目錄中)。
在正常使用情況下,只有類型為 solr.TextField 的字段將指定一個(gè)分析器。配置分析器的最簡(jiǎn)單的方法是使用單個(gè) <analyzer> 元素,它的類屬性是一個(gè)完全限定的Java 類名。命名的類必須派生自 org.apache.lucene.analysis.Analyzer。例如:
<fieldType name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/>
</fieldType>
在這種情況下,單個(gè)類 WhitespaceAnalyzer 負(fù)責(zé)分析指定文本字段的內(nèi)容并發(fā)出相應(yīng)的令牌。對(duì)于簡(jiǎn)單的情況,如簡(jiǎn)單的英文散文,這樣的單個(gè)分析器類可能就足夠了。但是通常需要對(duì)字段內(nèi)容進(jìn)行更復(fù)雜的分析。
即使是最復(fù)雜的分析要求,通常也可以分解為一系列離散的、相對(duì)簡(jiǎn)單的處理步驟。正如你很快就會(huì)發(fā)現(xiàn)的那樣,Solr 發(fā)行版提供了大量的標(biāo)記器和過濾器,覆蓋了你可能遇到的大多數(shù)場(chǎng)景。建立一個(gè)分析器鏈非常簡(jiǎn)單,您可以指定一個(gè)簡(jiǎn)單的< analyzer >元素(無類屬性),使用子元素命名標(biāo)記器和過濾器的工廠類以使用,按照您希望它們運(yùn)行的??順序。
例如:
<fieldType name="nametext" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
請(qǐng)注意,org.apache.solr.analysis 包中的類可能在這里用簡(jiǎn)寫的 solr. 前綴來引用。
在這種情況下,<analyzer> 元素上沒有指定分析器類。相反,一系列更專業(yè)化的類連接在一起,共同作為該字段的分析器。該字段的文本被傳遞給list(solr.StandardTokenizerFactory)中的第一個(gè)項(xiàng)目,而從最后一個(gè)(solr.EnglishPorterFilterFactory)中出現(xiàn)的標(biāo)記是用于對(duì)任何使用 "nametext" fieldType 的字段進(jìn)行索引或查詢的術(shù)語。
字段值與索引術(shù)語:分析器的輸出會(huì)影響給定字段中索引的術(shù)語 (以及分析對(duì)這些字段的查詢時(shí)使用的術(shù)語),但不會(huì)影響字段的存儲(chǔ)值。例如: “Brown Cow”分成兩個(gè)索引詞 “brown” 和 “cow”,但存儲(chǔ)的值仍將是一個(gè)字符串: “Brown Cow”。
分析發(fā)生在兩種情況下:在索引的時(shí)候,當(dāng)一個(gè)字段被創(chuàng)建時(shí),分析得到的令牌流將被添加到一個(gè)索引中,并為該字段定義一組術(shù)語(包括位置、大小等)。在查詢時(shí)間,分析正在搜索的值,并將結(jié)果的條件與存儲(chǔ)在字段索引中的條件進(jìn)行匹配。
在很多情況下,對(duì)兩個(gè)階段都應(yīng)該進(jìn)行相同的分析。例如,當(dāng)您想要查詢精確的字符串匹配時(shí),這可能是不區(qū)分大小寫的。在其他情況下,您可能希望在索引期間應(yīng)用略有不同的分析步驟,而不是在查詢時(shí)使用的分析步驟。
如果您為 <analyzer> 字段類型提供了一個(gè)簡(jiǎn)單的定義(如上例所示),那么它將用于索引和查詢。如果您想要為每個(gè)階段使用不同的分析器,則可以包含兩個(gè)與 type 屬性區(qū)分的 <analyzer> 定義。例如:
<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="syns.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在這個(gè)理論性的例子中,在索引時(shí),文本被標(biāo)記化,標(biāo)記被設(shè)置為小寫,任何未列出的 keepwords.txt 都被丟棄,而保留的那些將被映射到文件 syns.txt 中的同義詞規(guī)則所定義的替代值。這基本上是從一組受限制的可能值生成索引,然后將它們規(guī)范化為可能甚至不會(huì)出現(xiàn)在原始文本中的值。
在查詢時(shí),唯一發(fā)生的規(guī)范化是將查詢條件轉(zhuǎn)換為小寫。在索引時(shí)發(fā)生的篩選和映射步驟不適用于查詢條件。在這個(gè)例子中,查詢必須非常精確,僅使用在索引時(shí)存儲(chǔ)的規(guī)范化術(shù)語。
在某些類型的查詢中(即:前綴、通配符、正則表達(dá)式等等),用戶提供的輸入不是用于分析的自然語言。諸如同義詞或停用詞過濾之類的東西在這些類型的查詢中不起作用。
可以在這些類型的查詢((如 Lowercasing 或 Normalizing Factories))中工作的分析工廠被稱為 MultiTermAwareComponents。當(dāng) Solr 需要對(duì)導(dǎo)致 Multi-Term 擴(kuò)展的查詢執(zhí)行分析時(shí),只使用在 query 分析器中使用的 MultiTermAwareComponents,不跳過 Multi-Term 的 Factory 將被跳過。
對(duì)于大多數(shù)使用情況,這提供了最好的行為,但是如果希望絕對(duì)控制對(duì)這些類型查詢執(zhí)行的分析,則可以明確定義一個(gè)要使用的 multiterm 分析器,如下例所示:
<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="syns.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<!-- No analysis at all when doing queries that involved Multi-Term expansion -->
<analyzer type="multiterm">
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: