首页 文章

无法在Solr 6.0中添加新的动态字段

提问于
浏览
0

我在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 字段已正确映射,但我仍然可以搜索它?
screen-shot of Solr showing mapping of actual field to dynamic field

有谁知道这里有什么不对吗?

2 回答

  • 0

    我认为这是因为文件 managed-schema.xml 已经定义了很多 dynamicFields .

    而你的领域必须使用其中之一 .

    我认为你的领域正在使用

    <dynamicField name="*_t"   type="text_general" indexed="true" stored="true"/>
    

    或者可以使用

    <dynamicField name="*_ss" type="strings"  indexed="true"  stored="true"/>
    

    或者可能还有其他动态字段 .

    我建议你删除其余的所有 dynamicField ,这些都不是必需的,并保留你添加的那些 .

    完成此操作后,重新启动服务器并重新索引数据并进行检查 .

  • 0

    答案在你的截图中 . 这完全是关于 docValues . 您的属性在字段和类型定义之间累积 . string 类型的定义现在包括 docValues="true" .

    这意味着即使使用 indexed=false ,精确值搜索仍然可以对docValues起作用 . 并且,从模式版本1.6(在Solr 5.5和6.0中),docValues can be returned,即使 stored=false .

    如果您不喜欢这样,请从 string 类型中删除 docValues=true 或创建另一个没有该标志的类似类型 . 或者在字段定义中明确覆盖它 .

相关问题