我定义了一个copyField并调用它:“IsIntranet”,我知道我的用户在内部网使用192.168。* Ip
如果我的正则表达式在IsIntranet复制字段中匹配,我想设置值true
,如果没有,我将false
设置为
这是我的正则表达式(192\.168\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))
我怎么能这样做?
如果您需要更多信息,我可以编辑我的问题。
谢谢。
答案 0 :(得分:0)
您似乎正在寻找条件copyField。
您可以通过创建UpdateRequestProcessorFactory的子类来完成此操作。
然后,如果它与正则表达式匹配,则可以覆盖processAdd
方法以添加到isIntranet字段。
public void processAdd(AddUpdateCommand cmd) throws IOException {
SolrInputDocument doc = cmd.getSolrInputDocument();
Object v = doc.getFieldValue( "ip" );
if( v != null ) {
String regexPattern = "(192\.168\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))"
if( Pattern.matches(regexPattern, v) ) {
doc.addField( "IsIntranet", true );
}
}
super.processAdd(cmd);
}
您可以找到整个示例here。