做用:解析用户传递的搜索信息,抽取出关键字,而后进行过滤,最后去索引库检索,返回用户须要的信息,例如百度的关键字竞价机制web
做用:检查域的文本和生成token stream,分析器经过scheme.xml配置文件中的fieldType元素配置,传统的搜索时全文匹配,分析器能够经过分析用户输入的文本字符抽取term(关键字),进行查询而后汇总结果,这样搜索引擎更加智能化apache
简单案例:schema.xml配置搜索引擎
<fieldType name="nametext" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/> </fieldType> 分析:为solr.TextField的域类型指定分析器
复杂定义分析器:spa
<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> 分析:Field的Text首先被传递给第一个solr.StandardTokenizerFactory,最后一个组件产生terms,词语,用于索引或查询nameText类型的field
注意:code
org.apache.solr.analysis包里面的类能够直接被引用为solr.为前缀的类 例: solr.EnglishPorterFilterFactory 等价于 org.apache.solr.analysis. EnglishPorterFilterFactoryxml
Analyzer会影响在给定Filed里面索引的term,可是不会影响其实际存储的值blog
分析发生在2种状况:索引
一般一样的分应用于index/query两个阶段,当进行准确的字符串匹配时效果使人满意,在其余的状况下索引和查询阶段能够轻微不一样token
一些状况下Analysis处理不是天然语言,像同义词、过滤的中止词Analysis Factory能够在进行这种类型的查询,例如小写处理,分析工厂典型MultiTermAwareComponent,当solr对多语句集的结果执行查询分析事,只有MultiTermAwareComponent能用于查询分析器中,其余的Factory会被忽略字符串
<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>
做用:分词器主要用于拆分文本流为Tokens,每一个Token是文本流的一个子串,分析器直到solr配置的Field,可是Tokenizer不知道,所以分词器只是进行简单的拆分工做
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
4.配置Field使用ik分词器的fieldType
<field name="title_ik" type="text_ik" indexed="true" stored="true"/> <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true" />
效果:
注意:新版本的solr可能和IK分词器不兼容,需修改IK分词器源码