我在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" />
我们需要它作为多值字段,因为文档可能为每个产品定义了多个值。
请帮助我。
由于
答案 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进行此更改后,您需要重新索引数据,以便正确存储并反映在搜索结果中的新字段类型。