摘要: Solr的Filed中有很多参数,其中的index和store参数让人有点犯晕。

消失的Field

<field name="description_s" type="text" indexed="false" stored="false" required="false" />
  • 1

上面的这个Field的index和store属性都设置为false。如果你插入一片含有该field的doc到Solr,你会发现不能query这个field,就好像刚才插入的数据丢失了。

异想天开的设计

有时候你不希望你的数据被索引或存储,那么你就可以设置这两个参数都为FALSE。对于dynamicField设置的比较宽泛,通过上面这种设置就可以把某一种数据排除掉。

<dynamicField name="*_s" type="text" indexed="true" stored="true"/>
  • 1

这种dynamicField是一种常见的配置,可以指定一个具体的Field来覆盖这种设计。

索引?存储?

通过indexed=true可以使得一个field可以被搜索,如果你有一个字段title设置的是indexed=true,那么q=title:csdn就是在搜索标题中含有csdn的document。如果你设置indexed=false,就算你有符合的数据也无法搜索出来。 stored=true意味着你可以在结果中看到这个field,通过fl参数可以控制是否在结果中显示,如果你设置stored=false,就算你有符合的数据看不到该field。

 

你可以这样理解:
Indexed=true   就是可以查询
Stored=true     就是内容存储

设置关键是只设置需要查询的Indexed=true,需要和查询结果一起返回的字段内容设置Stored=true,其他就是false,节约索引大小和资源。

indexed表示需不需要建立索引,以便之后对这个field进行查询; 

stored表示需不需要随索引同时存储这个field本身的内容,以便查询时直接从结果中获取该内容,一般大数据(比如文件内容本身)不会和索引一起保存,节省资源,防止索引过大。