Solr使用细节——配置

solr版本:8.4.1

springboot版本:2.3.0.RELEASE

环境:centos

配置文件大白话描述:

managed-schema 配置字段的

solrconfig.xml 配置处理规则的,比如数据同步,各种插件

stopwords.txt 停用词库,直观的描述就是搜不到的词

synonyms.txt 同义词库,直观的描述就是定义好同义词 猫,美少女,那么不管搜猫还是搜美少女都是一样的

protwords.txt  缩写保护,不想被还原的词,在stemming模式下,如果你不希望某个单词被stemming(转换成原型),那么你就可以把他们放入protwords.txt字典文件中,这样他们就不会被还原成原型了,直白的说就是,manager/managing/managed/manageable不想被还原成manag

 

managed-schema

有3个特殊字段

_version_

如果去除此字段,必须同时去掉solrconfig.xml中的update log。_version_ and update log 在SolrCloud中是必须的。作用类似于hibernate中的version字段,用于乐观锁。

_root_

如果document中内嵌document,此需要此字段。用于内嵌的document指向其父document。

id

除非你有很充足的理由,否则不要去除”id”字段。不要改变type属性, 不要对对应的字段进行索引时分析。

常用举例:

<field name="path" type="string" indexed="true" stored="true" multiValued="false" />
name字段名
type

字段类型,例如:

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" docValues="true" />

indexed

是否简历索引,大白话就是能不能作为条件查询

stored是否存储,大白话就是能不能用来显示
multiValued

是不是集合,如果是true,那么存的数据就类似于:

["数据一号","数据二号"]

docValues

正排索引,是面向列存储,默认是false;

1,需要聚合的字段,包括sort,agg,group,facet等
2,需要提供函数查询的字段
3,需要高亮的字段,这个确实能加速,但是不建议把高亮放在服务端程序做,建议放在前端实现,不容易出错而且总体性能比服务端高
4,需要参与自定义评分的字段

直白的说,一般情况用不到这个字段,会用到的应该都已经知道这是干嘛的了

required是否必填

 

 

 

 

 

 

 

 

 

 

 

还有很多其他的参数请参照:

https://lucene.apache.org/solr/guide/8_4/field-type-definitions-and-properties.html#field-type-definitions-and-properties

fieldType举例:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
  <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

上面示例中的第一行包含字段类型名称text_general和实现类的名称solr.TextField

analyzer部分是关于字段解析器的,比较复杂,参照官方解释:https://lucene.apache.org/solr/guide/8_4/understanding-analyzers-tokenizers-and-filters.html#understanding-analyzers-tokenizers-and-filters

dynamicField,动态字段举例:

<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>

用来定义未明确的字段,大白话就是用来偷懒或者解决一些动态字段的场景的,比如:定义了name是attr_*的字段,那么attr_name可以用,attr_age也可以用。最过分的写法:

<dynamicField name="*" type="text_general" indexed="true" stored="true" multiValued="true"/>

存进去的结果:

{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"*:*",
      "_":"1612681420018"}},
  "response":{"numFound":3,"start":0,"docs":[
      {
        "did":["11"],
        "dname":["11"],
        "id":"6a5f4d28-bc13-4ff2-a1c0-17525bd51c29",
        "_version_":1691019029926379520},
      {
        "did":["12"],
        "dname":["12"],
        "id":"ad422ecb-6254-4921-99ea-d7ea117e5ee1",
        "_version_":1691019029965176832},
      {
        "dddddd":["asdasd"],
        "id":"d7c1753e-abc1-404f-8357-95712647940b",
        "_version_":1691019129272664064}]
  }}

但是不建议这么做,这会使维护项目变得十分恶心。

copyField,复制字段举例

<field name="remarks" type="string" indexed="true" stored="true"/>
<field name="title" type="string" indexed="true" stored="true"/>
<field name="keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="remarks" dest="keywords"/>
<copyField source="title" dest="keywords"/>

官话跳过,直白的说:keywords 可以当作emarks和title用来查数据,但是需要注意的是如果最终有多个copyField,dest指向的字段必须要设置 multivalued="true"

官网地址:https://lucene.apache.org/solr/guide/8_4/copying-fields.html

 

 

solrconfig.xml

一般比较常用情况是配置dataimport同步数据,https://lucene.apache.org/solr/guide/8_4/uploading-structured-data-store-data-with-the-data-import-handler.html

或者是用来设置solr插件的,比如:

文件上传和tika

 <requestHandler name="/update/extract"
                  startup="lazy"
                  class="solr.extraction.ExtractingRequestHandler" >
    <lst name="defaults">
      <str name="fmap.content">text</str>
      <str name="fmap.meta">ignored_</str>
      <str name="lowernames">true</str>
      <str name="uprefix">attr_</str>
      <str name="captureAttr">true</str>
    </lst>
  </requestHandler>
  <requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
      <str name="config">tika-data-config.xml</str>
    </lst>
  </requestHandler>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值