我有以下配置:
...
<field name="spellcheck" type="text_spell" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_de" type="text_spell_de" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_en" type="text_spell_en" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_fr" type="text_spell_fr" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_ja" type="text_spell" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_zh" type="text_spell" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_pt" type="text_spell_pt" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_it" type="text_spell_it" indexed="true" stored="true" multiValued="true" />
<field name="spellcheck_low" type="text_spell" indexed="true" stored="true" multiValued="true" />
<field name="spellchecksearch" type="text_spell_en" indexed="true" stored="false" multiValued="true" />
<copyField source="spellcheck_en" dest="spellcheck_low" />
<copyField source="spellcheck_low" dest="spellchecksearch" />
...
spellcheck_en 字段已经填充,并且已正确复制到 spellcheck_low 字段中,并且已正确建立索引(使用卢克索引查看器,我看到该字段的索引不为空)。但是, spellcheck_low 的副本似乎不起作用,因为 spellchecksearch 为空。注意: spellcheck_en 和 spellcheck_low 字段均已索引和存储,而 spellchecksearch 则不存储而仅被索引。
为什么会这样呢?您可以弄清楚字段副本的工作原理,非常感谢:)
答案 0 :(得分:2)
copyField
指令不会作为图形进行评估-最初为source
字段提交的值也用于填充dest
给出的字段。
由于没有为spellcheck_low
字段提交任何值,因此copyField
指令最终复制了一个空值(..或根本没有执行)。
对于您来说,spellcheck_en
字段必须有两个目的地:
<copyField source="spellcheck_en" dest="spellcheck_low" />
<copyField source="spellcheck_en" dest="spellchecksearch" />
这将与您尝试实现的相同,因为任何复制操作都将在任何处理或建立索引之前发生(更新处理器IIRC除外)。
答案 1 :(得分:1)
spellchecksearch为空,因为未存储。当一个字段被索引但没有存储时,它仅可用于搜索,但其值保持为空。并且它不会在值中返回。 有关详细信息,您可以阅读- Solr index vs stored
我认为,如果您对spellchecksearch字段进行索引并存储,您的问题将得到解决。