国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Solr Analyzers分析器介紹

2019-11-09 15:29:35
字體:
來源:轉載
供稿:網友

摘要: Solr的分析器在檢索過程中起著關鍵作用,這個分析就是提取關鍵信息的過程,就相當于把我們能看懂的句子轉化成Solr能識別的信息。Analyzer用來校驗字段的文本并生成標記流token stream. 參見原文

單一的Analyzer

可以在schema.xml中找到Analyzer的身影,通常來說,在配置solr.TextField的時候,會指定Analyzer,用一個<analyzer>標簽來聲明一個Analyzer,這個屬性”class”則派生自org.apache.lucene.analysis.Analyzer。 例如:

<fieldType name="nametext" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/></fieldType>

這里的WhitespaceAnalyzer就是一種分析器,負責分析文本字段的內容并生成相應的token。有時,單一的Analyzer就足夠用了,但是,大多數情況下都是需要更復雜地分析文本。

組合的Analyzer

對于那些復雜的分析需求,我們可以將其分解成一系列簡單的步驟。Solr提供了許多的tokenizersfilters來應對一些常見的情景。在實際運用中,可能常見的情況是將analyzer拆解成一個tokenizers和多個filters。

例如:

<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>

這里的前綴solr.實際上代表的是org.apache.solr.analysis。沒有給<analyzer>指定一個”class”,而是用一系列的”class”來共同作為一個字段的分析器。文本字段將首先由StandardTokenizerFactory處理,然后生成的token傳入下一個”calss” StandardFilterFactory處理,直到最后一個EnglishPorterFilterFactory得到的token作為最終的結果,用于index或者query。

Analyzer 的結果影響的是字段的index效果,不影響其stored的值。假如分析器將文本”Those fields”分析成了”they”和”filed”,但是真正存儲的值還是”Those fields”。

復雜的Analyzer

一般來說,分析器在兩個階段使用:index和query。索引階段:在字段創建好后,Analyzer就將token stream添加到索引,并定義好字段的位置position和大小size等信息。查詢階段:將關鍵詞分析以后去字段的索引庫匹配。 通常,我們對這兩個階段設置相同的Analyzer。 有時候,有特殊的業務需求,我們需要設置不同的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>

這個例子中,在indexquery階段使用了不同的分析策略。在index階段使用更復雜的分析方式,而在query階段只簡單的處理要查詢的關鍵詞可以讓檢索更準確。

在Solr3.6以后,又加入一種新的分析鏈analyzer chains,一般定義為<analyzer type="multiterm">。 在分析某些查詢(例如含有通配符、同義詞)的時候,Solr使用了特殊的邏輯。對于MultiTermAwareComponents的分析,Solr可以處理多值(Multi-Term)的字段,但是不屬于MultiTermAwareComponents的,多值字段可能會被忽略。大多數情況下,這樣的設計時合理的,但是如果你有特殊的分析需求,需要定義一個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>

目前已知的MultiTermAwareComponents: ArabicNormalizationFilterFactory, ASCIIFoldingFilterFactory, CJKWidthFilterFactory, DecimalDigitFilterFactory, ElisionFilterFactory, GermanNormalizationFilterFactory, GreekLowerCaseFilterFactory, HindiNormalizationFilterFactory, IndicNormalizationFilterFactory, IrishLowerCaseFilterFactory, LowerCaseFilterFactory, LowerCaseTokenizerFactory, MappingCharFilterFactory, PersianCharFilterFactory, PersianNormalizationFilterFactory, ScandinavianFoldingFilterFactory, ScandinavianNormalizationFilterFactory, SerbianNormalizationFilterFactory, SoraniNormalizationFilterFactory, TurkishLowerCaseFilterFactory, UpperCaseFilterFactory


上一篇:WebRTC音頻

下一篇:WebRtc 之P2C的建立

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵宝市| 手机| 禹州市| 天全县| 定日县| 阳泉市| 通化县| 深水埗区| 客服| 蕉岭县| 新闻| 六安市| 洛川县| 汪清县| 虞城县| 叙永县| 聂荣县| 石林| 崇礼县| 茌平县| 静宁县| 宁强县| 东兰县| 正蓝旗| 苍山县| 黄大仙区| 石城县| 贵德县| 新巴尔虎左旗| 隆昌县| 图木舒克市| 太和县| 子长县| 息烽县| 松潘县| 长垣县| 闵行区| 江源县| 达州市| 讷河市| 定边县|