IP地址检索服务支持*模糊查询 (#389)

diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/SyncUtils.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/SyncUtils.java
index 293de8f..9902039 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/SyncUtils.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/SyncUtils.java
@@ -33,6 +33,8 @@
 
     public static final String ID_FILTER_KEY = ".id";
 
+    public static final String COLON = ":";
+
     public static Provider url2Provider(Pair<String, URL> pair) {
         if (pair == null) {
             return null;
@@ -140,9 +142,18 @@
                 String value = e.getValue();
 
                 if (ADDRESS_FILTER_KEY.equals(key)) {
-                    if (!value.equals(url.getIp())) {
-                        match = false;
-                        break;
+                    // value is address:port
+                    if (value.contains(COLON)) {
+                        if (!value.equals(url.getIp() + COLON + url.getPort())) {
+                            match = false;
+                            break;
+                        }
+                    }
+                    else {  // value is just address
+                        if (!value.equals(url.getIp())) {
+                            match = false;
+                            break;
+                        }
                     }
                 } else {
                     if (!value.equals(url.getParameter(key))) {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
index 8ea6d7d..a68be44 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
@@ -43,7 +43,7 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
+import java.util.stream.Collectors;
 
 @Component
 public class ProviderServiceImpl extends AbstractService implements ProviderService {
@@ -421,6 +421,9 @@
             } else if (Constants.APPLICATION.equals(pattern)) {
                 candidates = findApplications();
             }
+            else if (Constants.IP.equals(pattern)) {
+                candidates = findAddresses().stream().collect(Collectors.toSet());
+            }
             // replace dot symbol and asterisk symbol to java-based regex pattern
             filter = filter.toLowerCase().replace(Constants.PUNCTUATION_POINT, Constants.PUNCTUATION_SEPARATOR_POINT);
             // filter start with [* 、? 、+] will triggering PatternSyntaxException
@@ -435,7 +438,11 @@
                 if (matcher.matches() || matcher.lookingAt()) {
                     if (Constants.SERVICE.equals(pattern)) {
                         providers.addAll(findByService(candidate));
-                    } else {
+                    }
+                    else if (Constants.IP.equals(pattern)) {
+                        providers.addAll(findByAddress(candidate));
+                    }
+                    else {
                         providers.addAll(findByApplication(candidate));
                     }
                 }