第二章、Solr各配置文件说明

阅读更多

一、schema配置文件(schema.xml或managed-schema)

下面这里先贴一段schema.xml配置示例,后面会围绕此示例讲解 



  
  id

  
  
  
    
      
      
      
      
      
      
    
    
      
      
      
      
      
      
      
    
  

  
  
  
  
 

 

1. 配置的基本原则

这一段是官方文件中,一段提高性能的一些原则说明

这里包含了很多实际应用不需要的可选项。 为改善性能,你可以:
  - 尽量将所有仅用于搜索,而不用于实际返回的字段设置stored="false";
  - 尽量将所有仅用于返回,而不用于搜索的字段设置indexed="false";
  - 去掉所有不需要的copyField 语句;
  - 为了达到最佳的索引大小和搜索性能,对所有的文本字段设置indexed="false",
    使用copyField将他们拷贝到“整合字段”name="text"的字段中,使用整合字段进行搜索;
  - 使用server模式来运行JVM,同时将log级别调高, 避免输出所有请求的日志。

 

2. 新版本(5.0+)注意schema配置文件变化

solr-5.0 以上默认对schema的管理是使用managed-schema,允许通过‘Schema API’管理(添加、删除等),通过修改solrconfig.xml可以禁用(只允许手动修改配置)




  

 PS~修改了配置文件,直接在“Core Admin”中重启对应的core即可,不需重启整个tomcat

 

3. fieldType各属性说明

fieldType用来定义字段类型,solr提供了基本的一些类型,如int、float、double、date、string等,我么也可以自定义类型。

fieldType标签对应属性说明如下:

  • name:类型名称,如int、float等
  • class:实现类名,也就是solr中真正的类型的类名
  • sortMissingFirst/sortMissingLast:可选属性,目前支持字符串或数字类型的排序
  • sortMissingLast:该字段没值的doc将排在有值的哪些doc之后
  • sortMissingFirst:与sortMissingLast刚好相反
  • positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误(多值字段才有用)

fieldType下面还可以定义Analyzer,关于此后面会用专门的章节介绍

 

4. field各属性说明

  • name: 必须属性 - 字段名(字母、数字、下划线组成,且不能以数字开头。两端为下划线的字段为保留字段,如_version_)
  • type: 必须属性,字段类型(schema中定义)
  • indexed: 如果字段需要被索引(用于搜索或排序),属性值设置为true
  • stored: 如果字段内容需要被返回,值设置为true
  • docValues: 如果这个字段应该有文档值(doc values),设置为true。文档值在门面搜索,分组,排序和函数查询中会非常有用。虽然不是必须的,而且会导致生成索引变大变慢,但这样设置会使索引加载更快,更加NRT友好,更高的内存使用效率。然而也有一些使用限制:目前仅支持StrField, UUIDField和所有 Trie*Fields, 并且依赖字段类型, 可能要求字段为单值(single-valued)的,必须的或者有默认值。
  • multiValued: 如果这个字段在每个文档中可能包含多个值,设置为true
  • termVectors: [false] 设置为true后,会保存所给字段的相关向量(vector),当使用MoreLikeThis时, 用于相似度判断的字段需要设置为stored来达到最佳性能.
  • termPositions: 保存和向量相关的位置信息,会增加存储开销 
  • termOffsets: 保存 offset 和向量相关的信息,会增加存储开销
  • required: 字段必须有值,否则会抛异常
  • default: 在增加文档时,可以根据需要为字段设置一个默认值,防止为空
5. DynamicField
动态字段(Dynamic fields)允许 solr 索引没有在 schema 中明确定义的字段。这个在忘记定义一些字段时很有用,可以让系统更灵活,通用性更强。
动态字段和常规字段类似,除了它名字中包含一个通配符外,在索引文档时,一个字段如果在常规字段中没有匹配时,将到动态字段中匹配。
例如,如果我们的导入SQL有2个字段address、email未定义对应的solr字段,我们可以直接用dynamic字段”address_s“&"email_s" ,会匹配到动态字段"*_s"。我们查询所有的doc时,可以看到返回的文档中包含了address_s、email_s两个字段。
 
6. CopyField
将多个字段复制集中到一个字段,这样我们索引的时候就可以直接查询这个目标字段。例如,我们可能想要查询short_desc,tags两个字段中带有NBA的文档,我们可以使用查询字符串"_text_:NBA",这个"_text_"就是一个查询的目标字段(默认有定义),我们也可以定义自己的。
相关说明:
  • source:待复制的字段,支持通配符
  • dest:要复制到哪个字段,支持通配符
  • maxChars:支持的字符数
7. uniqueKey
文档的唯一标识,可理解为主键
8. 需要注意的地方:
  • 保留字段不能删除,否则报错
  • 对于CopyField,如果dest由多个source构成,就需要将其指定为multiValued

二、配置文件solrconfig.xml

这个配置文件是用来配置对应core的,下面介绍一些主要的配置

1.配置从数据库导入的requestHandler

 

  
    
    data-config.xml  
    
2.配置schema.xml
新版本默认的是managed-schema文件中配置field等信息,并可通过Schema API管理,可在此文件中配置启用schema.xml,请见上章。

 

3.其他

dataDir parameter:/var/data/solr   
用来指定一个替换原先在Solr目录下默认存放所有的索引数据,可以在Solr目录以外的任意目录中。如果复制使用后应该符合该参数。如果这个目录不是绝对路径的话,那么应该以当前的容器为相对路径。   
mainIndex :   
这个参数的值用来控制合并多个索引段。   
:通过将很多 Lucene 内部文件整合到单一一个文件来减少使用中的文件的数量。这可有助于减少 Solr 使用的文件句柄数目,代价是降低了性能。除非是应用程序用完了文件句柄,否则 false 的默认值应该就已经足够。   
mergeFactor:   
决定低水平的 Lucene 段被合并的频率。较小的值(最小为 2)使用的内存较少但导致的索引时间也更慢。较大的值可使索引时间变快但会牺牲较多的内存。   
maxBufferedDocs:   
在合并内存中文档和创建新段之前,定义所需索引的最小文档数。段 是用来存储索引信息的 Lucene 文件。较大的值可使索引时间变快但会牺牲较多的内存。   
maxMergeDocs:   
控制可由 Solr ,000) 最适合于具有合并的 Document 的最大数。较小的值 (< 10大量更新的应用程序。该参数不允许lucene在任何索引段里包含比这个值更多的文档,但是,多余的文档可以创建一个新的索引段进行替换。   
maxFieldLength:   
对于给定的 Document,控制可添加到 Field 的最大条目数,进而截断该文档。如果文档可能会很大,就需要增加这个数值。然而,若将这个值设置得过高会导致内存不足错误。   
unlockOnStartup:   
unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为 true 可以禁用启动锁定,进而允许进行添加和更新。   
   
       
    false   
    10   
    1000   
    2147483647   
    10000   
     
  
updateHandler:   
这个更新处理器主要涉及底层的关于如何更新处理内部的信息。(此参数不能跟高层次的配置参数Request Handlers对处理发自客户端的更新相混淆)。   
   
  
       
缓冲更新这么多的数目,设置如下比较低的值,可以约束索引时候所用的内存   
    100000   
等待文档满足一定的标准后将自动提交,未来版本可以扩展现有的标准   
       
        
      10000    
触发自动提交前最多可以等待提交的文档数量   
      86000    
在添加了一个文档之后,触发自动提交之前所最大的等待时间   
       
  
这个参数用来配置执行外部的命令。   
一个postCommit的事件被触发当每一个提交之后   
   
      snapshooter   
      solr/bin   
      true   
         
       
exe--可执行的文件类型   
dir--可以用该目录做为当前的工作目录。默认为"."   
wait--调用线程要等到可执行的返回值   
args--传递给程序的参数 默认nothing   
env--环境变量的设置 默认nothing   
  
   
       
    1024   
  
:   
控制跟查询相关的一切东东。   
  
Caching:修改这个参数可以做为索引的增长和变化。   
  
   
       
  
      
查询结果缓存   
       
  
     
由于Lucene的内部文档ID标识(文档名称)是短暂的,所以这种缓存不会被自动warmed。   
       
  
       
这么做的的关键就是应该明确规定实现solr.search.CacheRegenerator接口如果autowarming是比较理想化的设置。   
       
  
       
    true   
  
       
  
一种优化用于queryResultCache,当一个搜索被请求,也会收集一定数量的文档ID做为一个超集。举个例子,一个特定的查询请求匹配的文档是10到19,此时,queryWindowSize是50,这样,文档从0到50都会被收集并缓存。这样,任何更多的在这个范围内的请求都会通过缓存来满足查询。   
    50   
  
       
       
  
  
       
       
  
       
    false
 

返回目录

>>>未完待续

你可能感兴趣的:(第二章、Solr各配置文件说明)