luceneMatchVersion

1
<luceneMatchVersion>5.2.0</luceneMatchVersion>

solr 底层使用的 lucene 版本

dataDir

1
<dataDir>${solr.data.dir:/opt/apache-tomcat-solr/conf/solr/core1/data}</dataDir>

配置索引数据文件存放的目录,默认的目录是 $SOLR_HOME/data

directoryFactory

1
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}" />

目录工厂,决定了索引存储的方式。

工厂 描述
StandardDirectoryFactory 基于文件系统,依赖当前操作系统和 java 虚拟机
MMapDirectoryFactory 使用虚拟内存和内核中一个叫 mmap 的特性来访问存在磁盘中的索引文件。
它允许 Lucene 直接访问 I/O 缓存,当不需要近实时搜索(Near Real Time Search),这是一个不错的选择
NIOFSDirectoryFactory 适用于多线程环境,在 Windows 平台不能很好的工作
NRTCachingDirectoryFactory     将部分索引存储在内存中,提升近实时搜索(Near Real Time Search)的效率
SimpleFSDirectoryFactory 适用于小型应用程序,不支持大数据和多线程
RAMDirectoryFactory 索引存储在 RAM 内存中,不支持持久化存储。服务重启等会造成索引丢失

updateHandler

1
2
3
4
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
<int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
</updateLog>

设置索引库的更新日志,默认的目录是 $SOLR_HOME/data/tlog

1
2
3
4
5
<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>${solr.autoCommit.maxTime:30000}</maxTime>
<openSearcher>true</openSearcher>
</autoCommit>

设置自动硬提交的方式。自动硬提交对性能有一定的影响,它确保索引数据同步到磁盘,因此不会因为宕机等异常状况而造成大量数据丢失。硬提交后的文档是不可见的,需要重新打开一个新的 Searcher,才能看得见变化

参数 描述
maxDocs 设置达到多少个文档时提交一次
maxTime 设置达到多长时间时提交一次
openSearcher     文档提交后是否开启新的 Searcher
false:文档只是提交到索引库,搜索结果中搜不到此次提交的文档
true :文档提交到索引库,搜索结果中也能搜到此次提交的文档
1
2
3
4
<autoSoftCommit>
<maxDocs>1000</maxDocs>
<maxTime>2000</maxTime>
</autoSoftCommit>

自动软提交,只确保变化是看得见的,但不保证数据同步到磁盘。软提交后的文档立即可用

query

1
<maxBooleanClauses>1024</maxBooleanClauses>

条件搜索时,会产生大量的 boolean 条件,如果条件数达到设定的这个阀值时,将抛出异常,限制这个条件数,可以防止条件过多查询等待时间过长

1
2
3
4
<filterCache class="solr.FastLRUCache"
size="2048"
initialSize="2048"
autowarmCount="512"/>

配置过滤器缓存。filterCache 存储了无序的文档的 ID 集合。如 filter queries("fq" 参数)得到的文档的 ID 集合结果等

LRUCache 是基于 LinkedHashMap,读写操作都是对 map 的全局锁,并发性方面稍差

FastLRUCache 是基于 ConcurrentHashMap ,具有更快的读取能力和较好的并发性能

参数 描述
size 缓存中的最大数目
initialSize 初始容量
autowarmCount     当打开一个新的 Searcher 时,可以对新的 Searcher 做预热处理。即从老的 Searcher 中取该值指定的缓存条目数目填充到新的 Searcher 中。如果使用的是 LRUCache,则取最近访问的条目填充到新的 Searcher 中
1
2
3
4
<queryResultCache class="solr.LRUCache"
size="4096"
initialSize="4096"
autowarmCount="512"/>

配置查询结果缓存。查询结果缓存的是查询条件的结果的有序文档的 ID 集合。同 filterCache 参数

1
2
3
4
<documentCache class="solr.LRUCache"
size="5120"
initialSize="5120"
autowarmCount="0"/>

配置文档缓存。文档缓存的是 < 文档 ID, 文档对象 > 键值对。参数与 filterCache 同

1
2
3
4
<fieldValueCache class="solr.FastLRUCache"
size="512"
autowarmCount="128"
showItems="32" />

配置字段值缓存。字段缓存使用文档 ID 进行快速访问。默认情况下创建 fieldValueCache,即使这里没有配置

1
<enableLazyFieldLoading>true</enableLazyFieldLoading>

是否允许字段延迟加载。若为 true,非必须字段(required = "false")将被延迟加载,特别是一些大的压缩文本字段,延迟加载可以提升性能

1
<queryResultWindowSize>50</queryResultWindowSize>

优化 queryResultCache(查询结果缓存)。如从查询结果每次取匹配的 10 个文档,如 10 到 19,那么文档 0 到 49 将被用来收集和缓存条目用。下次请求 20 到 39 的数据时,直接命中缓存,很快就能拿到结果。该值越大,查询结果缓存的文档的 ID 集合就越大,命中缓存的概率也就越大,但是这样也会很浪费内存

1
<queryResultMaxDocsCached>800</queryResultMaxDocsCached>

查询结果最大缓存的文档的数目。

1
<useColdSearcher>true</useColdSearcher>

是否使用冷搜索。当一个搜索请求到来时,如果当前没有注册的搜索可用,那么将立即注册一个,并且需等到自热后才能使用它。若该值为 false,那么,所有的搜索请求将阻塞在第一个搜索,直到第一个搜索注册并自热完成

1
<maxWarmingSearchers>2</maxWarmingSearchers>

设置最大的 Searcher 数量,这些 Searcher 都是事先预热好的,随时可以使用。如果超过这个数量,将会报错。

在一个只读的索引库中,2 个预热的 Searcher 是相对合理的;如果是读写的索引库中,可以给一个相对大一点的值

1
<requestDispatcher handleSelect="false">

配置请求分发器。当访问的 URL 为 /select,如 /select?qt=xxx

若 handleSelect="true",SolrDispatchFilter 将请求转发给 qt 指定的处理器(前提是 /select 已经注册)

当 handleSelect="false" 时会直接访问 /select,若 /select 未注册则报 404

1
2
3
4
5
6
7
8
9
10
11
12
<requestHandler name="/select" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="q.op">AND</str>
<str name="q.alt">*:*</str>
<str name="fl">*,score</str>
<!-- <str name="df">text</str> -->
<str name="defType">edismax</str>
<str name="qf">name^5 sortName^2 subSortName^3</str>
</lst>
</requestHandler>

配置请求处理器。更多参数见如下表格

查询参数 描述
q 查询字符串
start 用于分页查询的结果。指定第一条记录在查询结果中的偏移量。默认值为 0
rows 指定从搜索结果中取多少条数据。与 start 配合使用
sort 搜索结果排序。默认为 score desc(按文档的得分降序排序)
fl 用来指定文档结果中应返回的字段列表。多个字段之间用逗号分隔,默认为 "*" 指返回所有的字段。score 返回文档的得分,如: *,score
q.alt 当查询串 q 为空时,使用该值,通常设置 q.alt 为 *:*
wt 指定查询结果输出的格式,如 json,xml 等,默认为 xml 格式
fq 过滤查询。在 q 查询的结果中,再用 fq 条件过滤一次结果
q.op 搜索串中有空格时,使用 OR 逻辑 还是 AND 逻辑
df 指定默认的查询字段
qt 当访问的 url 为 /select,如 /select?qt=xxx,solr 将使用 qt 参数的值来确定使用哪个 requestHandler 来处理查询请求
indent 返回的结果是否缩进,默认关闭,一般调试输出才有必要用这个参数
echoParams       是否显示查询参数。none:不显示;explicit:只显示查询参数;all:显示所有的参数
qf 指定从哪些字段中查询,如果没有配置,则使用 df 的值
defType 指定处理查询的 Query Parser。如
defType=lucene   (Standard Query Parser)
defType=dismax  (DisMax Query Parser)
defType=edismax(Extended DisMax Query Parser)