Solr:PatternReplaceFilterFactory能否替换copyField的字段值然后将其索引?

时间:2013-10-01 02:39:16

标签: search solr solr4

我已经索引了solr包附带的solr.xml和monitor.xml中的数据,并在schema.xml文件中添加了以下配置

<field name="my_field" type="my_field_type" indexed="true" stored="true" required="false"/>
<copyField source="name" dest="my_field" />
<fieldType name="my_field_type" class="solr.TextField">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern=".*" replacement="NameChanged" replace="all" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

它将(name)字段复制到fieldType(my_field_type)的(my_field)。在(my_field_type)中,我使用PatternReplaceFilterFactory尝试用字符串“NameChanged”替换所有内容。结果是它确实将(name)字段及其值复制到(my_field),但值仍保持不变。例如,下面返回的结果包含(name)和(my_field)字段,这两个值的值字段是相同的,它没有将字段的值更改为“NameChanged”(my_field)

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">2</int>
  <lst name="params">
    <str name="fl">id,name,my_field,</str>
    <str name="indent">true</str>
    <str name="q">*:*</str>
    <str name="_">1380593840070</str>
    <str name="wt">xml</str>
  </lst>
</lst>
<result name="response" numFound="2" start="0">
  <doc>
    <str name="id">SOLR1000</str>
    <str name="name">Solr, the Enterprise Search Server</str>
    <str name="my_field">Solr, the Enterprise Search Server</str></doc>
  <doc>
    <str name="id">3007WFP</str>
    <str name="name">Dell Widescreen UltraSharp 3007WFP</str>
    <str name="my_field">Dell Widescreen UltraSharp 3007WFP</str></doc>
</result>
</response>

那么,PatternReplaceFilterFactory能否替换copyField的字段值然后将其编入索引?如果是,我在上述配置中做错了什么?

1 个答案:

答案 0 :(得分:1)

分析器链用于字段的标记化(可搜索)表示。您显示的结果是原始存储表示。这就是为什么你不会看到任何改变的原因。

相反,请在字段分析器屏幕或架构描述字段(带有用于加载令牌的复选标记的字段)中检查管理界面中的标记化表示。或者,对于快速测试,使用 my_field 作为构面,因为构面使用实际的标记。

如果您尝试更改实际存储的表示形式以及索引的表示形式,则最好使用CloneFieldUpdateProcessorFactoryRegexReplaceProcessorFactory使用UpdateRequestProcessor链。这是在solrconfig.xml中定义的,并且在文档存储/索引之前应用于文档。