即使存储了 x,选择子句中也未定义名称 x

Undefined name x in selection clause even when x is stored

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

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

这似乎是 DSE 中的一个问题。但是,如果您只想返回 color_base,您可以通过要求返回 color_description 来获得完全相同的结果:

/solr/my_keyspace.my_table/select?q=color_base:white&fl=color_description

即使color_description和color_base是不同的类型,存储的值是发送给Solr的原始值,而不是分析后的结果,所以你通过请求得到相同的数据任何一位。

编辑:关于你的评论......你应该能够对分析值进行分面:

    /select?q=your query&facet=true&facet.field=color_base

但我现在无法对此进行测试,我的 DSE 架构中没有任何 copyField,请尝试并希望您不会遇到与 fl 类似的问题...

我发现我无法使用分析器添加搜索结果,而这正是我的目标。分析器只是为了提高搜索能力,结果不能被 Solr 修改。我必须向底层数据库 (Cassandra) 添加一个新字段并将我想要的值映射到其中。经验教训 - Solr 仅用于搜索,而不用于 changing/updating/appending 结果集。