Solr4:设计数据结构,就是配置schema.xml

正常数据结构一个是需要考虑中文分词,二个是考虑是否索引,是否分词,是否存储等等。

下面的示范用到了三种类型的数据:

一:字段需要分词、需要索引、需要存储,如:网页中的标题、内容等字段。

二:字段需要索引,但不需要分词,需要存储,如:网页的发布时间等内容。

三:字段不需要索引,不需要分词,但需要存储,如:引用的图片位置。

不存在不需要索引、也不需要分词,也不需要存储的字段,因为这样的字段在Lucene中无意义。

示范配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?xml version="1.0" ?>
<schema name="news" version="1.1">
    <fields>
        <!--下面三个字段需要分词,索引,存储 -->
        <!-- 发布者 -->
        <field name="webUser" type="text_mm4j" indexed="true" stored="true"/>
        <!-- 标题 -->
        <field name="webTitle" type="text_mm4j" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/>
        <!-- 内容 -->
        <field name="webContent" type="text_mm4j" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/>
 
        <!--下面需要索引,不分词,需要存储 -->
        <!-- 来源ID -->
        <field name="webId" type="int" indexed="true" stored="true"/>
        <!-- 主键ObjectID -->
        <field name="objectId" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <!-- 论坛类型(txt/pic/video) -->
        <field name="webType" type="string" indexed="true" stored="true"/>
        <!-- 发布时间 -->
        <field name="webTime" type="date" indexed="true" stored="true"/>
 
        <!--下面信息仅存储 -->
        <!-- 网站描述 -->
        <field name="webCommit" type="string" indexed="false" stored="true"/>
        <!-- 网址 -->
        <field name="webUrl" type="string" indexed="false" stored="true"/>
        <!-- 生成网页地址 -->
        <field name="webHtml" type="string" indexed="false" stored="true"/>
        <!-- 视频 -->
        <field name="webVideo" type="string" indexed="false" stored="true"/>
        <!-- 图片 -->
        <field name="webImage" type="string" indexed="false" stored="true" multiValued="true"/>
 
        <!--下面信息为区别数据类型,索引,不分词,存储 -->
        <!-- 索引类型,bbs/news/blog -->
        <field name="indexType" type="string" indexed="true" stored="true"/>
        <!-- 拷贝字段 ,索引不存储 -->
        <field name="text" type="text_mm4j" indexed="true" stored="false" multiValued="true"/>
        <field name="_version_" type="long" indexed="true" stored="true"/>
    </fields>
 
    <copyField source="webUser" dest="text"/>
    <copyField source="webTitle" dest="text"/>
    <copyField source="webContent" dest="text"/>
 
    <uniqueKey>objectId</uniqueKey>
 
    <defaultSearchField>text</defaultSearchField>
 
    <solrQueryParser defaultOperator="OR"/>
 
    <types>
        <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
        <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
        <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
        <fieldType name="date" class="solr.TrieDateField" 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" />
                <!-- in this example, we will only use synonyms at query time
                <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
                -->
                <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>
        <fieldType name="text_ik" class="solr.TextField">
            <analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
            <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        </fieldType>
        <fieldType name="text_mm4j" class="solr.TextField" >
            <analyzer type="index">
                <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="C:/solr/mm4jdic"/>
                <!--
                <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="/usr/local/solr/mm4jdic"/>
                -->
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            </analyzer>
            <analyzer type="query">
                <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="C:/solr/mm4jdic"/>
                <!--
                <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="/usr/local/solr/mm4jdic"/>
                -->
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            </analyzer>
        </fieldType>
    </types>
</schema>

补充说明:

termVectors=”true” termPositions=”true” termOffsets=”true”

这几项参数是在项目中使用到FastVectorHighlighter时需要配置的,如果没有使用FastVectorHighlighter的话,可以忽略这些参数。

multiValued=”true”

此项参数为是否允许多值,主键不允许多值。但图片等允许多值,另拷贝字段(如:text字段)默认也是多值。

type=”string”

string类型的字段默认不分词,当作整体来看。

type=”text_mm4j”

text_mm4j类型的即是中文分词组件,参考types下面关于name=”text_mm4j”的具体配置。本项目中标题、内容等字段需要使用此类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值