99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Solr分析器概述

2018-11-13 16:52 更新

分析器檢查字段的文本并生成令牌流。

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ù)語。

分析多期擴(kuò)展

在某些類型的查詢中(即:前綴、通配符、正則表達(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>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)