选择子句中的未定义名称x,即使存储x也是如此

时间:2017-02-21 17:11:02

标签: solr lucene datastax-enterprise

我正在使用颜色描述字段中的颜色同义词创建一个复制字段,这是有效的。我可以使用像我这样的复制字段进行搜索

/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>

2 个答案:

答案 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仅用于搜索,不用于更改/更新/附加结果集。