我在solr-6.0.0 / server / solr / configsets / data_driven_schema_configs / conf / managed-schema中添加了一些新的动态字段,如下所示:
<dynamicField name="*_sst" type="string" indexed="false" stored="true" />
<dynamicField name="*_sin" type="string" indexed="true" stored="false" />
然后我启动solr并添加一个集合:
bin/solr start -cloud
bin/solr create -c my_coll -shards 2 -replicationFactor 1
当我导航到http://localhost:8983/solr/#/my_coll/files?file=managed-schema时,我看到动态字段被拾取
<dynamicField name="*_sst" type="string" indexed="false" stored="true"/>
<dynamicField name="*_sin" type="string" indexed="true" stored="false"/>
但是,当我将文档发送到此集合并进行查询时,我能够通过 *_sst 字段进行查询(这些字段仅用于存储),并且我在结果中看到了 *_sin 个字段(这些字段仅用于索引) .
在看到http://localhost:8983/solr/#/my_coll/schema?field=FooPrefix.name2_sst时,它确实显示我的 _sst 字段已正确映射,但我仍然可以搜索它?
有谁知道这里有什么不对吗?
2 回答
我认为这是因为文件
managed-schema.xml
已经定义了很多dynamicFields
.而你的领域必须使用其中之一 .
我认为你的领域正在使用
或者可以使用
或者可能还有其他动态字段 .
我建议你删除其余的所有
dynamicField
,这些都不是必需的,并保留你添加的那些 .完成此操作后,重新启动服务器并重新索引数据并进行检查 .
答案在你的截图中 . 这完全是关于 docValues . 您的属性在字段和类型定义之间累积 . string 类型的定义现在包括 docValues="true" .
这意味着即使使用 indexed=false ,精确值搜索仍然可以对docValues起作用 . 并且,从模式版本1.6(在Solr 5.5和6.0中),docValues can be returned,即使 stored=false .
如果您不喜欢这样,请从 string 类型中删除 docValues=true 或创建另一个没有该标志的类似类型 . 或者在字段定义中明确覆盖它 .