diff --git a/mock/aggregation.js b/mock/aggregation.js
index 62c96fc..8da0157 100644
--- a/mock/aggregation.js
+++ b/mock/aggregation.js
@@ -31,7 +31,7 @@
     return data.array;
   },
   getAllEndpointTopN: () => {
-    const data =  mockjs.mock({ 'array|10': [{ 'id|+1': 1, name: '@name', 'value|200-1000': 1 }]});
+    const data =  mockjs.mock({ 'array|10': [{ 'id|+1': 100, name: '@name', 'value|200-1000': 1 }]});
     return data.array;
   },
 };
diff --git a/src/components/Page/Search/index.js b/src/components/Page/Search/index.js
index 5cddb5a..9aca61a 100644
--- a/src/components/Page/Search/index.js
+++ b/src/components/Page/Search/index.js
@@ -37,53 +37,61 @@
   componentDidMount() {
     const {...propsData} = this.props;
     if (propsData.variables && Object.keys(propsData.variables).length > 0) {
-      this.originFetchServer('', propsData.value.key);
+      this.originFetchServer('', propsData.value);
     }
   }
 
   componentDidUpdate(prevProps) {
     const {...propsData} = this.props;
     if (prevProps.variables !== propsData.variables) {
-      this.originFetchServer('', propsData.value.key);
+      this.originFetchServer('', propsData.value);
     }
   }
 
-  fetchServer = (value, key) => {
-    if (value === undefined) {
+  fetchServer = (keyword, value) => {
+    if (keyword === undefined) {
       return;
     }
     const { url, query, variables = {}, transform } = this.props;
-    this.lastFetchId += 1;
-    const fetchId = this.lastFetchId;
+    const that = this;
+    that.lastFetchId += 1;
+    const fetchId = that.lastFetchId;
     this.setState({ data: [], fetching: true });
     request(`/api${url}`, {
       method: 'POST',
       body: {
         variables: {
           ...variables,
-          keyword: value,
+          keyword,
         },
         query,
       },
     }).then(body => {
-      if (!body.data || fetchId !== this.lastFetchId) {
+      if (!body.data || fetchId !== that.lastFetchId) {
         // for fetch callback order
         return;
       }
       const list = body.data[Object.keys(body.data)[0]];
-      const that = this;
       this.setState({ data: transform ? list.map(transform) : list, fetching: false });
       if (that.state.data.length < 1) {
         return;
       }
-      if (!key) {
+      if (!value) {
+        return;
+      }
+      const { key, label } = value;
+      if (!key || key.length < 1) {
         this.handleSelect(that.state.data[0]);
         return;
       }
       const option = that.state.data.find(_ => _.key === key);
-      if (!option) {
-        this.handleSelect(that.state.data[0]);
+      if (option) {
+        return;
       }
+      const target = {key, label};
+      const newList = [...that.state.data, target];
+      this.setState({data: newList});
+      this.handleSelect(target);
     });
   };
 
diff --git a/src/models/endpoint.js b/src/models/endpoint.js
index bb617fc..cc5c472 100644
--- a/src/models/endpoint.js
+++ b/src/models/endpoint.js
@@ -328,23 +328,6 @@
       return history.listen(({ pathname, state }) => {
         if (pathname === '/monitor/endpoint' && state) {
           dispatch({
-            type: 'saveVariables',
-            payload: {
-              values: {
-                endpointId: state.key,
-              },
-              labels: {
-                endpointId: state.label,
-              },
-            },
-          });
-          dispatch({
-            type: 'saveData',
-            payload: {
-              endpointInfo: { key: state.key, label: state.label },
-            },
-          });
-          dispatch({
             type: 'fetchInfo',
             payload: {
               variables: {
diff --git a/src/routes/Endpoint/Endpoint.js b/src/routes/Endpoint/Endpoint.js
index 49f07df..f024da4 100644
--- a/src/routes/Endpoint/Endpoint.js
+++ b/src/routes/Endpoint/Endpoint.js
@@ -264,6 +264,12 @@
     const { getFieldDecorator } = form;
     const { variables: { options }, data } = endpoint;
     const { showTimeline, queryTrace, currentTraceId } = data;
+    if (!this.serviceInfo) {
+      this.serviceInfo = data.serviceInfo;
+    }
+    if (data.serviceInfo && this.serviceInfo.serviceId !== data.serviceInfo.serviceId) {
+      this.serviceInfo = data.serviceInfo;
+    }
     return (
       <div>
         {showTimeline ? (
@@ -293,14 +299,14 @@
                   </Select>
                 )}
               </FormItem>
-              {data.serviceInfo && data.serviceInfo.serviceId  ? (
+              {this.serviceInfo && this.serviceInfo.serviceId  ? (
                 <FormItem>
                   {getFieldDecorator('endpointId')(
                     <Search
                       placeholder="Search a endpoint"
                       onSelect={this.handleSelect.bind(this)}
                       url="/graphql"
-                      variables={data.serviceInfo}
+                      variables={this.serviceInfo}
                       query={`
                         query SearchEndpoint($serviceId: ID!, $keyword: String!) {
                           searchEndpoint(serviceId: $serviceId, keyword: $keyword, limit: 10) {
