Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何基于SOLR中的其他字段设置具有布尔值的复制字段?_Regex_Solr_Boolean - Fatal编程技术网

Regex 如何基于SOLR中的其他字段设置具有布尔值的复制字段?

Regex 如何基于SOLR中的其他字段设置具有布尔值的复制字段?,regex,solr,boolean,Regex,Solr,Boolean,我定义了一个copyField并将其命名为:“IsIntranet”,我知道我的用户在intranet中使用192.168.*Ip 如果我的正则表达式在IsIntranet copy字段中匹配,我想设置值true,如果不匹配,我将false设置为该值 这是我的正则表达式(192\.168\(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 我怎么能做这样的事 如果您需要更多信息,我可以编辑我的问题 谢谢。您似乎正在寻找条件复制字段 您可以通过创建UpdateReques

我定义了一个copyField并将其命名为:“IsIntranet”,我知道我的用户在intranet中使用192.168.*Ip

如果我的正则表达式在IsIntranet copy字段中匹配,我想设置值
true
,如果不匹配,我将
false
设置为该值

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

我怎么能做这样的事

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


谢谢。

您似乎正在寻找条件复制字段

您可以通过创建UpdateRequestProcessorFactory的子类来实现这一点。 然后,如果与正则表达式匹配,则可以重写要添加到isIntranet字段的
processAdd
方法

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);
}

你可以找到整个例子。

但我想在方案中这样做我的问题是什么???这是现实世界的问题