Solr实践教程(2)—–schemal.xml配置相关

Schema.xml

schema.xml位于solr/conf/目录下,类似于数据表配置文件,定义了加入索引的数据的数据类型,主要包括type、fields和其他的一些缺省设置。

FieldType

name???????????? FieldType名称class????????????指向org.apache.solr.analysis包里面对应的class名,用来定义类型的行为。sortMissingLast=true|false?????? True:没有该field的数据排在有该field的数据之后,不管请求时的排序规则。(默认值为false)sortMissingFirst=true|false??????True:没有该field的数据排在有该field的数据之前,不管请求时的排序规则。(默认值为false)indexed=true|false?????????????? 是否被索引stored=true|false????????????????是否需要被存储multiValued=true|false?????????? 是否需要存储多个值,按照顺序生成listomitNorms=true|false???????????? 是否忽略掉Norm,可以节省内存。positionIncrementGap=N?????????? 对Multivalue Field进行处理的时候,给两个field中相隔的词人为的插入一段固定的distance,???????????????????????????????? 然后在使用Lucene/Solr做Phrase query的时候,如果没有指定Slop,会默认Slop为0,???????????????????????????????? 即查询的短语之间应该紧紧挨着,这样对很多情况下都得不到用户想要的结果autoGeneratePhraseQueries=true|false????这个属性只能用于文本域。如果在查询文本分析时产生了多个词元,比如Wi-Fi分词为Wi和Fi, 那么默认情况下它们只是两个不同的搜索词,它们没有位置上的关系。????????????????????????????????????????但如果autoGeneratePhraseQueries被设置,那么这两个词元就构造了一个词组查询,即“WiFi”,????????????????????????????????????????所以索引中“WiFi”必须相邻才能被查询到。????????????????????????????????????????在新Solr版本中,默认它被设置为false。我不建议使用它。

copyField

copyField配置在索引时将一个或多个输入域的值拷贝到另一个域。一个copyField配置如下:

<!--END_DEVFMTCODE-->在当你想将一个域的值以不同的方式索引时,这个配置就发挥它的作用了。比如,排序和Faceting需要单个索引值。在搜索技巧中另一个常用的方法是将多个域的值拷贝到一个域去,这个域不使用norm也不进行排序。这可以使搜索只搜索 一个域而不是多个域,从而在牺牲得分质量的代价下可以极大的提高搜索性能。这种技巧通常还会搜索另几个有着较高boost的域以弥补得分的影响。在本章后面介绍的dismax查询解析器,会使这变得容易。dynamicField动态域定义的概念,它展示了Lucene相比典型的关系数据库索引的灵活性,在Solr中你不但可以明确地指定域的名字,也可以直接使用建索引时文档中提供的名字。Solr的示例Schema中提供一个例子,如下:<!--DEVFMTCODE-->

如果在建索引的时候,如果一个文档中的一个域既与一个明确的域定义匹配,又与一个动态域定义模式匹配(比如update_dt,它匹配*_dt),那么会选择明确的域定义名字。动态域定义和普通域定义格式一样,但元素的名字是dynamicField,并且它的name属性必须以星号开头或是结尾。也可以只有*一个字符,表示匹配所有。最后,无论是明确定义的域或是动态定义的域,它都是域,动态定义域只是方便地定义schema的一种方式。动态定义域方式不会对性能造成影响。

uniqueKey

在接近schema的最下面是uniqueKey声明,它指定每个文档的唯一ID,如果这个ID存在。下面是我们在MusicBrainz Schema中的配置:

id

尽管这个配置不是强制要求的,但是你应该定义一个唯一ID域。在我们的MusicBrainz Schema中,ID是一个字符串,它有实体类型的前缀,所以是全局唯一的,比如Artist:11650。如果你的源数据中没有一个ID域,你可以考虑用Universally Unique Identifier,一个遵循RFC-4122标准的UUID。你只需要有一个class属性值为solr.UUIDField的域类型的域,或是将域的defaultField的值为一个特殊值“NEW”,这样Solr就会自动产生UUID,Solr的UUID是基于java.util.UUID的。

Solr实践教程(2)—–schemal.xml配置相关

相关文章:

你感兴趣的文章:

标签云: