我有一个Apache Solr 3.5设置,它有一个像这样的SchemaXml:
<field name="appid" type="string" indexed="true" stored="true" required="true"/>
<field name="docid" type="string" indexed="true" stored="true" required="true"/>
Run Code Online (Sandbox Code Playgroud)
我需要的是一个将它们连接在一起并将其用作的字段<uniqueKey>.似乎没有内置,没有创建一个多值id字段和使用<copyField>,但似乎uniqueKey需要一个单值字段.
我需要这个的唯一原因是允许客户盲目地<add>拨打电话,并让Solr弄清楚它是否是添加或更新.所以,我没有太在意怎样的ID样子.
我想我必须编写自己的Analyzer或Tokenizer?我刚刚开始学习Solr,所以我不能100%确定我真正需要什么,并且会欣赏我需要实现的任何提示.
我个人会给用户带来负担,因为他们很容易为每个文档添加一个字段.
否则,我猜你必须编写几行代码.您可以自己编写UpdateRequestProcessorFactory,根据其他现有字段的值自动将新字段添加到每个输入文档.您可以使用分隔符并将其保持为单值.在你的UpdateRequestProcessor,你应该重写processAdd这样的方法:
@Override
public void processAdd(AddUpdateCommand cmd) throws IOException {
SolrInputDocument doc = cmd.getSolrInputDocument();
String appid = (String)doc.getFieldValue( "appid" );
String docid = (String)doc.getFieldValue( "docid" );
doc.addField("uniqueid", appid + "-" + docid);
// pass it up the chain
super.processAdd(cmd);
}
Run Code Online (Sandbox Code Playgroud)
然后你应该将你UpdateProcessor的自定义添加updateRequestProcessorChain为链中的第一个处理器(solrconfig.xml):
<updateRequestProcessorChain name="mychain" >
<processor class="my.package.MyUpdateRequestProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
<processor class="solr.LogUpdateProcessorFactory" />
</updateRequestProcessorChain>
Run Code Online (Sandbox Code Playgroud)
希望它有效,我还没试过.我已经做过类似的事情但没有使用uniqueKey或必填字段,这是你能找到的唯一问题.但我想如果你把updateProcessor放在链的开头,它应该可以工作.
| 归档时间: |
|
| 查看次数: |
3342 次 |
| 最近记录: |