对于文本,solr在建立索引和搜索的时候需要对其做一定的处理(比如英文要去掉介词、转成小写、单词原形化等,中文要恰当地要分词)。这些工作,一般由Analyzers、Tokenizers、和Filter来实现。这三个东东配置在fieldType中。下面分别介绍一下

1、analyzer:告诉solr在建立索引和搜索的时候,如何处理text类型的内容,比如要不要去掉“a”、去掉介词、去掉复数,要不要全部变成小写等等……它在schema.xml文件中配置,可以直接指定一个类给它;也可以由tokenizer和filter的组合来实现。

此结点有几个参数:

  • type:可选参数,index或query,表名这个配置是在建立索引还是在搜索的时候使用
  • tokenizer:分词器,比如:StandardTokenizerFactory
  • filter:过滤器,比如:LowerCaseFilterFactory,小写转换

2、tokenizer:在analyzer结点内,指定analyzer的分词器。

3、filter:过滤器,比如:LowerCaseFilterFactory,小写转换

下面是一个配置的例子:

<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
</analyzer>
<analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
Tokenizer和Filter的区别
  • Tokenizer:接收text(通过从solr那里获得一个reader来读取文本),拆分成tokens,输出token stream
  • Filter:接收token stream,对每个token进行处理(比如:替换、丢弃、不理),输出token stream
因此,在配置文件中,Tokenizer放在第一位,Filter放在第二位直到最后一位。
 
 
对于简单的英文文本,可以这样配置(使用空格分词器,不需要tokenizer和filter):
<fieldType name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
</fieldType>
一般情况下,需要更多的处理,比如:
<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
注:type="index"或"type="query" 这个参数如果没有,则表示两种都适用。
注:那些Factory并不是真正的tokenizer或filter,而是负责创建一个实现tokenizer接口的类。
注:由于filters是顺序执行的,前一个的结果是后一个是输入,所以,一般通用的处理放在前面,特殊的处理靠后
 
这些tokenizer和filter是顺序执行的,在建索引的情况下,最后一个filter EnglishPorterFilterFactory的输出,就会被用来建立索引。而原文本是不会变的,比如A Red Cow的索引是red, cow,但原文件还是保持Many Cows。
 
tokenizer和filter的配置还可以接收额外的参数:
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="; "/>
<filter class="solr.LengthFilterFactory" min="2" max="7"/>
<analyzer>
</fieldType>

solr5.5教程-Analyzer、Tokenizer、Filter的更多相关文章

  1. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - Analyzer, tokenizer(4)

    有些时候,我们需要自定义 fieldType.下面的例子就是自定义的 fieldType,<analyzer type="index"> 表示索引时怎么处理,<a ...

  2. solr中的Tokenizer Filter

    Tokenizer Tokenizer 的工作是将文本流分解为令牌,其中每个令牌(通常)是文本中字符的子序列.分析器知道它配置的字段,但 tokenizer 不是.Tokenizers 从字符流(Re ...

  3. solr5.5教程-tomcat布署

    tomcat和solr在各自官网下载,版本如下: tomcat版本:8.0.24 solr版本:5.5.0 1.solr解压后,目录结构如下: 2.tomcat的webapps里新建solr目录, 把 ...

  4. solr5.5教程-solr.home 配置

    solr/home是solr实例化core核的依据和入口,是必不可少的配置. 1.在web.xml中设置 <env-entry> <env-entry-name>solr/ho ...

  5. solr5.5教程-schema.xml部分配置

    本文章全部内容均翻译自solr自带的配置文件. 1.Field结点说明 name: 必须的,field的名字 type:        必须的,fieldType部分所定义的type的名字 index ...

  6. solr5.5教程-solrconfig.xml,加载schema.xml

    布署完成后,接下来要更深入的研究solr的原理和使用. 首先进入testcore这个文件夹下面,发现这个core的conf里并没有schema.xml.那么数据格式是在哪里定义的呢? 打开 solr_ ...

  7. solr5.5教程-tomcat布署(2)

    tomcat 布署成功后,接下来就是使用了. 首先要创建一个core. 1.选择右侧菜单, Core Admin -> Add Core. 注意:name自己定义,instanceDir要填写上 ...

  8. ElasticSearch最全分词器比较及使用方法

    介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...

  9. solr学习之六--------Analyzer(分析器)、Tokenizer(分词器)

    首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...

随机推荐

  1. BingHack,Bing旁注API查询工具

    现在旁注查询都失效了.通过网上查询发现有人说可以通过微软的API进行旁注查询 https://datamarket.azure.com/dataset/explore/bing/search 注册登录 ...

  2. Chapter 2: Design the user experience

    Apply the user interface design for a web application 介绍了Css的常用属性和html5的新element,以及Htmlhelper的简单方法,如 ...

  3. liunx之:ln命令

    linux  一个很重要的命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: ln -s  源文件 目标文件    -s 是 symbolic的意思 ...

  4. browser shell

    我一直坚信,做项目需要通过文档来总结.一来可以梳理自己的项目和思路,二来可以备忘,三则可以为有同样需求的朋友提供一些参考.如果一直不进行总结,真的很可能是写了多年的代码,却只有一年的经验.当学习一项新 ...

  5. nsq

    官网:http://nsq.io (1)描述 都是message broker,rabbitmq久经考验,nsq则是后起之秀.rabbitmq是erlang编写,nsq是golang. 安装:http ...

  6. hosts 文件妙用

        127.0.0.1  localhost  www.baidu.com  www.126.com  www.xiaoxiao.com 1: 如果在hosts文件中加入这句话,则localhos ...

  7. Android日常开发总结的技术经验60条 转

    1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2. 数据库表段字段常量和SQL逻辑分离,更清 ...

  8. [Linux] -Docker修改空间大小

    Docker默认空间大小分为两个,一个是池空间大小,另一个是容器空间大小. 池空间大小默认为:100G 容器空间大小默认为是:10G 所以修改空间大小也分为两个: 这里使用centos下的yum进行安 ...

  9. eclipse的常用快捷键

    Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切, ...

  10. C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错

    主要原因webservice返回值的长度超过readerQuotas中的了maxStringContentLength值,造成返回值截断,不完整,反序列化时出错. <readerQuotas m ...