2013-10-01 66 views
0

我已經收錄從solr.xml和monitor.xml與Solr的產品包裝中附帶的數據,我增加了以下配置在Schema.xml文件Solr:PatternReplaceFilterFactory是否可以替換copyField的字段值並將其編入索引?

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

它複製(名稱)字段( my_field)的fieldType(my_field_type)。在(my_field_type)中,我使用PatternReplaceFilterFactory試圖用字符串「NameChanged」替換所有內容。結果是它沒有將(名稱)字段和它的值複製到(my_field),但該值仍然保持不變。例如,下面返回的結果帶有(名稱)和(my_field)字段,這兩個值字段是相同的,它並沒有爲字段(my_field)的值更改爲「NameChanged」

<?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字段值,然後指數呢?如果是的話,我在上述配置中做錯了什麼?

回答

0

分析器鏈是用於標記化的(可搜索的)表示的字段。您顯示的結果是原始存儲的表示。這就是爲什麼你不會以這種方式看到任何變化。

請改爲在字段分析器屏幕或模式描述字段(一個帶有用於加載令牌的複選標記)中檢查Admin界面中的標記化表示。或者,對於快速測試,使用my_field作爲方面,因爲方面使用實際的令牌。

如果您試圖更改實際存儲的表示以及索引的表達式,則最好使用UpdateRequestProcessor鏈使用CloneFieldUpdateProcessorFactoryRegexReplaceProcessorFactory。這是在solrconfig.xml中定義的,並且在文檔存儲/索引之前應用於文檔。

+0

謝謝。當我在my_field上做面時,它確實顯示了變化。當我搜索my_field:namedchanged但沒有找到任何東西時,你知道爲什麼嗎?我試圖複製一個字段,更改它的值並能夠搜索新的值。 –

+0

在(Solr 4+)管理界面中,您有一個屏幕,您可以在左側和右側放置相同的短語,並相應地通過索引和查詢鏈。並顯示最終的令牌。這可以讓你瞭解你的連鎖配置的後果。例如。拼寫錯誤(就像你自己的例子'namechanged'和'namedchanged'一樣) –

+0

非常感謝。我能再問你一些問題嗎?如果我在查詢中加入了bq = my_field:namechanged^100.00,它是否會提高my_field值中「namedchanged」文檔的分數?如果我在查詢中放入了20個bq參數,它是否會影響搜索性能? –

相關問題