1

我在 Solr 4.0 中有 dynamicField 作为 'pa_mydynamicfieldname'

我在此字段中的存储值为:

我已经通过使用 System.Web.HttpUtility.UrlEncode(pa_mydynamicfieldname) 编码来索引我的数据,例如:2.2+GHz+Intel+Pentium+Dual-Core+E2200

当我应用方面查询来获取结果时,输出为:

<lst name="facet_fields">
<lst name="pa_mydynamicfieldname">
    <int name="2.2">1</int>
    <int name="2.5">1</int>
    <int name="core">1</int>
    <int name="dual">1</int>
    <int name="e2200">1</int>
    <int name="ghz">1</int>
    <int name="intel">1</int>
    <int name="pentium">1</int>
</lst>

而不是这个我想要输出为:

<lst name="facet_fields">
<lst name="pa_mydynamicfieldname">
    <int name="2.2+GHz+Intel+Pentium+Dual-Core+E2200">1</int>
</lst>

在应用方面查询时如何在 Solr 中执行此操作?

2013 年 5 月 15 日更新

从 Schema 中,文本字段定义为:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">

动态字段定义为:

<dynamicField name="pa_*" type="text" indexed="true" stored="true" multiValued="true" required="false" />

我们需要它作为多值字段,因为一个文档可能为每个产品定义了多个值。

请帮我。

谢谢

4

1 回答 1

3

为了完成您想要的行为,您需要更改 schema.xml 中动态字段的 fieldType。目前,您pa_mydyanmicfieldname可能被定义为 atype="text_general"和 with multivalued="true"。因此,您的字段值被拆分为标记,然后这些标记被存储为多个值。这会产生您显示的行为,其中多个单词/标记作为构面值返回。

由于您想在提交时存储原始值,请将您的 fieldType 更改为只是一个普通的旧字符串而不是多值:

 <dynamicField name="*_mydynamicfeldname" type="string" 
           indexed="true" stored="true"/>

或者,您也可以利用示例schema.xml中定义的基于预定义字符串的动态字段:

 <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />

对 schema.xml 进行此更改后,您需要重新索引数据,以便正确存储新字段类型并反映在搜索结果中。

于 2013-05-15T12:32:53.693 回答