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等 直白的说,一般情况用不到这个字段,会用到的应该都已经知道这是干嘛的了 |
required | 是否必填 |
还有很多其他的参数请参照:
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>