我正在使用颜色描述字段中的颜色同义词创建一个复制字段,这是有效的。我可以使用像我这样的复制字段进行搜索
/solr/my_keyspace.my_table/select?q=color_base:white
但该字段未显示在搜索结果中,如果我将字段添加到字段列表中
/solr/my_keyspace.my_table/select?q=color_base:white&fl=color_base
我收到错误
Undefined name color_base in selection clause
这是我的架构 - 我认为 stored =“true”会做到这一点,但事实并非如此。我只是想在搜索结果中看到字段 color_base 。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.TextField" name="ColorField">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" ignoreCase="true" synonyms="color_synonyms.txt" tokenizerFactory="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldType>
<fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
</types>
<fields>
<field indexed="true" multiValued="false" name="color_description" stored="true" type="StrField" docValues="true"/>
<field indexed="true" multiValued="true" name="color_base" stored="true" type="ColorField" docValues="true"/>
<copyField source="color_description" dest="color_base"/>
</fields>
<uniqueKey>(year, make, base_model)</uniqueKey>
</schema>
答案 0 :(得分:0)
看起来这是DSE中的一个问题。但是,如果您只想返回color_base,可以通过要求返回color_description来获得完全相同的结果:
this.state.Fields.forEach((field) => {
if(field.props.required === "1"){
var validField = (field.props.value != '' && field.props.value != undefined);
if(!validField){
//set the field style dynamically
}
}
validForm=validForm && validField;
});
即使color_description和color_base是不同的类型,存储的值也是发送给Solr的原始值,而不是分析后的结果,因此您可以通过询问任何数据获得相同的数据。
编辑:关于你的评论......你应该能够对分析的价值进行分析:
/solr/my_keyspace.my_table/select?q=color_base:white&fl=color_description
但我现在无法对此进行测试,我的DSE架构中没有任何copyField,请尝试并希望您不会遇到与fl相似的问题......
答案 1 :(得分:0)
我发现我无法使用分析器添加搜索结果,这是我的目标。分析仪仅用于提高搜索能力,但Solr无法修改结果。我不得不在底层数据库(Cassandra)中添加一个新字段,并将我想要的值映射到它中。获得的经验教训 - Solr仅用于搜索,不用于更改/更新/附加结果集。