2013-01-21 47 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