solr学习之路 配置文件的讲解以及页面客户端的使用

为什么我们学习页面客户端,其实在开发中几乎不会使用到页面客户端。但为什么要学,原因就是后面使用代码控制solr其实就是自己写代码实现页面客户端的各种功能。 总之,学习页面客户端的使用对我们入门solr是十分重要的 这里只介绍solr的核心功能的介绍。

页面主要功能

分词器

你可能注意到了,分词方式是什么,还记得我们配置ikanalyze时在schema.xml中添加的配置吗

<!-- IKAnalyzer-->
    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>


<!--IKAnalyzer Field-->
   <field name="title_ik" type="text_ik" indexed="true" stored="true" />
   <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>

趁机我们来讲讲schema.xml中的配置

fieldType name:是这个FieldType的名称 class:是Solr提供的包solr.TextField,solr.TextField 允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)和多个过滤器(filter) positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经验设置为100。

在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤

索引分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,solr.LowerCaseFilterFactory小写过滤器。 搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器

field name(名称), type(为之前定义过的各种FieldType), indexed(是否被索引), stored(是否被储存), multiValued(是否存储多个值)等属性。 multiValued:该Field如果要存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图),通过使用solr查询要看出返回给客户端是数组:

copyField copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检索: 比如,输入关键字搜索title标题内容content

<copyField source="title" dest="text"/>
   <copyField source="author" dest="text"/>
   <copyField source="description" dest="text"/>

上面的配置意思是将title域author域description域复制到text域 当搜索text域时也会去title域author域description域中搜索

dynamicField 动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个 dynamicField,name 为_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的, 就是任意匹配的意思

schema.xml配置讲解差不多了。 继续讲解页面客户端的使用 创建索引

查询

经验分享 程序员 微信小程序 职场和发展