2013-01-21 49 views
1

我試圖創建一個名爲「SKU」場 - 這是索引有以下分析:Solr的4 - 索引貼文本文件

<fieldType name="sku" class="solr.TextField"> 
    <analyzer> 
    <tokenizer class="solr.PatternTokenizerFactory" pattern="(SKU|Part(\sNumber)?):?\s(\[0-9-\]+)" group="3"/> 
</analyzer> 
</fieldType> 

這是從這裏閱讀文檔http://lucidworks.lucidimagination.com/display/solr/Tokenizers#Tokenizers-RegularExpressionPatternTokenizer

我已經有一個Java程序成功發佈到solr服務器,但是它不會從任何文件中抓取sku,並將它們編入索引。這是我的Java代碼:

ContentStreamUpdateRequest up = new ContentStreamUpdateRequest(
       "/update/extract"); 
     up.addFile(arg0, arg0.getName()); 

     up.setParam("literal.id", arg0.getName()); 
     up.setParam("uprefix", "attr_"); 
     up.setParam("fmap.content", "attr_content"); 

     up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); 

     server.request(up); 

任何幫助表示讚賞。

我知道我可以自己解析文本文件並提取SKU並將它們發佈到服務器的參數中,但我認爲Solr可以爲我做這件事嗎?

+0

您的SKU號碼看起來像是什麼模式是爲了捕捉?即:以「SKU」或「Part」開頭,可選詞「數字」,可選冒號,強制(!)空格,一個或多個數字和連字符(以及其他任何數字)來捕獲。請注意,我相信這也會區分大小寫。 – femtoRgon

回答

0

很難說出發生了什麼,因爲中間有幾個步驟。

例如,你的schema.xml定義是什麼。它是否使用sku作爲它的類型(而不是字符串)。那麼,字段名稱(attr_sku?)是什麼?抽取處理程序映射實際上是否正確映射到它?提取處理程序通常將元數據作爲單個字段發送,然後將所有文件內容作爲一個大長字段發送。元數據中是否有sku?

我會做一個copyField到非處理的東西,看看內容是否真的進入Solr字段。然後,我會開始解決正則表達式本身。

+0

感謝Alexandre的回覆。我建議您使用copyField來查看內容是否進入solr字段。它做什麼。我沒有看到任何正則表達式的錯誤,或者是我直接從Lucene文檔頁面複製它的示例數據(在原始文章中鏈接),它對我來說看起來是正確的。儘管如此,我已經設法實現了我想要的(用不同的標記器以不同的方式)。感謝您在正確的軌道上調試我。 – Chris