Facet查询将在solr中的dynamicfield上给出错误的输出

时间:2013-05-15 08:11:34

标签: e-commerce solrnet facets

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

我在此字段中的商店值为:

我已使用System.Web.HttpUtility.UrlEncode(pa_mydynamicfieldname)编码索引我的数据 例如:2.2 + GHz + Intel + Pentium +双核+ E2200

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

<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中执行此操作?

于15日 - 5月13日更新

从架构,文本字段定义为:

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

动态字段定义为:

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

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

请帮助我。

由于

1 个答案:

答案 0 :(得分:3)

为了完成您期望的行为,您需要更改schema.xml中动态字段的fieldType。目前,您的pa_mydyanmicfieldname可能定义为type="text_general"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进行此更改后,您需要重新索引数据,以便正确存储并反映在搜索结果中的新字段类型。