solr 基础 —— filed 与 schema

1. filed 的定义

定义一个 field,名字为 text_general

<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" />
    <!-- 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" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

  

2. fieldType 标签的属性说明

<fieldType name="date" class="solr.DatePointField"
           sortMissingLast="true" omitNorms="true"/>

主要分为:

* 通用属性

* 字段默认属性 可以在字段类型上指定,也可在单个字段上指定

部分属性说明:

indexed 是否已加入倒排索引,如果为false,则此字段搜索不到符合条件的文档

stored 意味着是否在结果中展示(也可通过 fl 控制是否在结果中显示)

sortMissingFirst/sortMissingLast 当使用该字段进行排序时,sortMissingLast = true 表示那些在该<field>上没有值的documents将被排在那些在该<field>上有值的documents之后。

multiValued 集合类型

<field name="executor"    type="int"   indexed="true"  stored="true"  multiValued="true" />
@Field
private Set<Integer> executor;

查询结果

large 用于懒加载较大的值(超过512KB不进行缓存),此属性需要 stored="true" 并且 multiValued="false"。

docValues  正向索引,主要是存储了DocID与Values之间的映射关系。

应用场景:

倒排索引 是一个 term-document 映射。优势在于通过某个单词找到 某个文档,但是在执行排序、分组或高亮操作就不那么高效了。比如使用  faceting,需要获取每个文档中的 term,构建一个 facet 列表。当文档很多时,会占用很多内存,速度就会非常慢。而 docValues 字段是一个面向列的字段,在索引时构建 document-value 的映射,减少了 fieldCache 的一些内存需求,便于快速进行分组或排序。

field 各类属性的应用场景 

 

3. field types 

① 日期类型 DatePointField

日期查询需要转义

datefield:1972-05-20T17\:33\:18.772Z
datefield:"1972-05-20T17:33:18.772Z"
datefield:[1972-05-20T17:33:18.772Z TO *]

② 日期范围类型 DateRangeField

2000-11 表示整个11月

[2014 TO 2014-12-01] 表示从 2014开始到 2014-12-01

[* TO 2014-12-01] 表示从最早的可表达时间到 2014-12-01

③ 数学计算

NOW+2MONTHS

NOW-1DAY

斜杠表示 round

NOW/HOUR 表示当前小时的开始时间

NOW+6MONTHS+3DAYS/DAY 表示当前时间+6个月+零3天的后的那天的开始时间

④ 时区

默认是 UTC,可以通过 TZ参数指定时区

http://localhost:8983/solr/my_collection/select?q=*:*&facet.range=my_date_field&facet=true&facet.range.start=NOW/MONTH&facet.range.end=NOW/MONTH%2B1MONTH&facet.range.gap=%2B1DAY&TZ=America/Los_Angeles&wt=xml 

⑤ 日期范围查询

有三种谓词

  • Intersects (default)

  • Contains

  • Within

fq={!field f=dateRange op=Contains}[2013 TO 2018]

 

参考


https://solr.apache.org/guide/8_8/overview-of-documents-fields-and-schema-design.html

posted on 2021-06-20 11:43  Lemo_wd  阅读(331)  评论(0编辑  收藏  举报

导航