Solr的一些配置
Core的创建
solr的相关配置是以core为基本单位的,每一个项目最好都建立一个core(当然这个名字可以自己设定)。
第一步
找到你把solr解压的位置,进入server—>solr,在此文件夹下你会看到类似下面的内容:
当然不是完全一样,phone这个文件夹是我自己建立的,mycore是solr自带的。如果你想建立自己的core,那么你就可以在这里新建一个文件夹,然后打开mycore文件夹,把里面的conf文件直接拷贝到你新建里的文件夹,然后打开http://127.0.0.1:8983/solr点击Core Admin,会看到如下内容:
在name菜单里面填上你刚才创建的文件夹的名字,在instanceDir菜单填上相同的名字,其它的按照默认即可,然后点击Add Core 即可。 点击左侧Core Select ,在显示的Core列表里如果有你刚刚创建的Core的话说明你创建成功了。
Core的相关配置
选中你创建的Core,你会看到如下内容:
左侧是菜单栏目,你可以随意点击看看内容。点击Files你会看到相关的配置文件,但是你不能直接修改,需要在本机上找到文件才能修改,有两个文件是比较重要的:schema.xml和solrconfig.xml。
1.schema.xml的配置
- types部分
这是一些常见的可重用定义,定义了 Solr(和 Lucene)如何处理 Field。也就是添加到索引中的xml文件属性中的类型,如int、text、date等.
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<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" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
参数说明:
name
标识而已
class
和其他属性决定了这个fieldType的实际行为。
sortMissingLast
设置成true没有该field的数据排在有该field的数据之后,而不管请求时的排序规则, 默认是设置成false。
sortMissingFirst
跟上面倒过来呗。 默认是设置成false
analyzer
字段类型指定的分词器
type
当前分词用用于的操作.index代表生成索引时使用的分词器query代码在查询时使用的分词器
tokenizer
分词器类
filter
分词后应用的过滤器 过滤器调用顺序和配置相同.
- fileds部分:
是你添加到索引文件中出现的属性名称,而声明类型就需要用到上面的types
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="path" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true" />
<field name="content" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true"/>
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_l" type="long" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
<copyField source="content" dest="pinyin"/>
<copyField source="content" dest="text"/>
参数说明:
field: 固定的字段设置
dynamicField: 动态的字段设置,用于后期自定义字段,*号通配符.例如: test_i就是int类型的动态字段.
还有一个特殊的字段copyField,一般用于检索时用的字段这样就只对这一个字段进行索引分词就行了copyField的dest字段如果有多个source一定要设置multiValued=true,否则会报错的
name
字段类型名
class
java类名
indexed
缺省true。 说明这个数据应被搜索和排序,如果数据没有indexed,则stored应是true。
stored
缺省true。说明这个字段被包含在搜索结果中是合适的。如果数据没有stored,则indexed应是true。
omitNorms
字段的长度不影响得分和在索引时不做boost时,设置它为true。
一般文本字段不设置为true。
termVectors
如果字段被用来做more like this 和highlight的特性时应设置为true。
compressed
字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只有StrField和TextField是可以压缩,这通常适合字段的长度超过200个字符。
multiValued
字段多于一个值的时候,可设置为true。
positionIncrementGap
和multiValued一起使用,设置多个值之间的虚拟空白的数量
注意:version 是一个特殊字段,不能删除,是记录当前索引版本号的.
- 其他配置
defaultSearchField:默认搜索属性,如q=solr就是默认的搜索那个字段
solrQueryParser:查询转换模式,是并且还是或者(AND/OR必须大写)
uniqueKey: 唯一键,这里配置的是上面出现的fileds,一般是id、url等不重复的。在更新、删除的时候可以用到。
2.solrconfig.xml的配置
- indexConfig:
mergeFactor :决定低水平的 Lucene 段被合并的频率。较小的值(最小为 2)使用的内存较少但导致的索引时间也更慢。较大的值可使索引时间变快但会牺牲较多的内存。
unlockOnStartup:unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为 true 可以禁用启动锁定,进而允许进行添加和更新。
lockType:
- single: 在只读索引或是没有其它进程修改索引时使用.
- native: 使用操作系统本地文件锁,不能使用多个Solr在同一个JVM中共享一个索引.
- simple :使用一个文本文件锁定索引.
unlockOnStartup:
unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为 true 可以禁用启动锁定,进而允许进行添加和更新。
- 查询配置
maxWarmingSearchers:最大自热searcher数量
useColdSearcher:是否使用冷搜索,为false时使用自热后的searcher
queryResultMaxDocsCached:查询结果doc的最大缓存数量, 例如要求每页显示10条,这里设置是20条,也就是说缓存里总会给你多出10条的数据.让你点示下一页时很快拿到数据.
queryResultWindowSize:一次查询中存储最多的doc的id数目.
fieldValueCache:字段缓存使用文档ID进行快速访问。默认情况下创建fieldValueCache即使这里没有配置。