我的日常

登录/注册
您现在的位置:论坛 资料库 开源社区 > schema.xml文件配置说明
总共48087条微博

动态微博

查看: 1943|回复: 0

schema.xml文件配置说明

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-10-09 12:27:40 |只看该作者 |倒序浏览
    schema.xml,这个相当于数据表配置文件,它定义了加入索引的数据的数据类型的。
    主要包括types、fields和其他的一些缺省设置。
    注:schema.xml里有一个uniqueKey,的配置,这里将id字段作为索引文档的唯一标识符,非常重要。
    <uniqueKey>id</uniqueKey>

    1.1. FieldType(类型)

    首先需要在types结点内定义一个FieldType子结点,包括name,class,positionIncrementGap等等一些参数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。
    在FieldType定义的时候,最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。
    例如:
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <!-- in this example, we will only use synonyms at query time
            <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
            -->
            <!-- Case insensitive stop word removal.
                 enablePositionIncrements=true ensures that a 'gap' is left to
                 allow for accurate phrase queries.
            -->
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true"
                    words="stopwords.txt"
                    enablePositionIncrements="true"
                    />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
          </analyzer>
         ……
        </fieldType>
    在index的analyzer中使用 solr.WhitespaceTokenizerFactory这个分词包,就是空格分词。
    然后使用 solr.StopFilterFactory,solr.WordDelimiterFilterFactory,solr.LowerCaseFilterFactory,solr.EnglishPorterFilterFactory,solr.RemoveDuplicatesTokenFilterFactory 这几个过滤器。
    在向索引库中添加text类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。
    Solr的analysis包并没有带支持中文分词的包。

    1.2. Fields(字段)

    接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段),就是filed。
    filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否有多个值)等等。
    例:
    <fields>
    <field name="id" type="integer" indexed="true" stored="true" required="true" />
    <field name="name" type="text" indexed="true" stored="true" />
    <field name="summary" type="text" indexed="true" stored="true" />
    <field name="author" type="string" indexed="true" stored="true" />
    <field name="date" type="date" indexed="false" stored="true" />
    <field name="content" type="text" indexed="true" stored="false" />
    <field name="keywords" type="keyword_text" indexed="true" stored="false" multiValued="true" />
    <field name="all" type="text" indexed="true" stored="false" multiValued="true"/>
    </fields>
    field的定义相当重要,有几个技巧需注意一下,对可能存在多值得字段尽量设置 multiValued属性为true,避免建索引是抛出错误;如果不需要存储相应字段值,尽量将stored属性设为false。

    1.3. copyField(复制字段)

    建议建立了一个拷贝字段,将所有的全文字段复制到一个字段中,以便进行统一的检索:
    <field name="all" type="text" indexed="true" stored="false" multiValued="true"/>
    并在拷贝字段结点处完成拷贝设置:
    <copyField source="name" dest="all"/>
    <copyField source="summary" dest="all"/>
    注:“拷贝字段”就是查询的时候不用再输入:userName:张三 and userProfile:张三的个人简介。
    直接可以输入"张三"就可以将“名字”含“张三”或者“简介”中含“张三”的又或者“名字”和“简介”都含有“张三”的查询出来。
    他将需要查询的内容放在了一个字段中,并且默认查询该字段设为该字段就行了。

    1.4. dynamicField(动态字段)

    除此之外,还可以定义动态字段,所谓动态字段就是不用指定具体的名称,只要定义字段名称的规则。
    例如定义一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。
    schema.xml配置文件大体上就是这样,更多细节请参见solr wiki:http://wiki.apache.org/solr/SchemaXml


    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表