如何使用SOLR中的其他字段设置具有布尔值的复制字段?

时间:2014-01-18 13:15:08

标签: regex solr boolean

我定义了一个copyField并调用它:“IsIntranet”,我知道我的用户在内部网使用192.168。* Ip

如果我的正则表达式在IsIntranet复制字段中匹配,我想设置值true,如果没有,我将false设置为

这是我的正则表达式(192\.168\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

我怎么能这样做?

如果您需要更多信息,我可以编辑我的问题。

谢谢。

1 个答案:

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