2014-10-31 4 views
2

일부 과학 실험의 매개 변수 데이터가 포함 된 ES 인덱스가 있습니다.키 길이로 필터 "용어 집계"

{ 
    "aggs": { 
     "variables": { 
      "terms": { 
       "field": "value", 
       "size": 100 
      } 
     } 
    }, 
    "size": 0 
} 

이 같은 결과를 반환합니다 :

나는 다음과 같은 용어 집계를

{ 
    "took" : 3, 
    "timed_out" : false, 
    "_shards" : { 
     "total" : 5, 
     "successful" : 5, 
     "failed" : 0 
    }, 
    "hits" : { 
     "total" : 9928, 
     "max_score" : 0.0, 
     "hits" : [ ] 
    }, 
    "aggregations" : { 
     "variables" : { 
      "buckets" : [ { 
       "key" : "00", 
       "doc_count" : 158 
      }, { 
       "key" : "1", 
       "doc_count" : 158 
      }, { 
       "key" : "2", 
       "doc_count" : 158 
      }, { 
       "key" : "pressure", 
       "doc_count" : 158 
      }, { 
       "key" : "seconds", 
       "doc_count" : 158 
      }, { 
       "key" : "since", 
       "doc_count" : 158 
      }, { 
       "key" : "s", 
        "doc_count" : 156 
      }, { 
       "key" : "speed", 
        "doc_count" : 127 
      }, { 
       "key" : "sample", 
        "doc_count" : 121 
      }, { 
       "key" : "a", 
        "doc_count" : 104 
      } ] 
     } 
    } 
} 

내가 길이가 모든 키를 무시 ElasticSearch에게 있습니다 싶지보다 작은 5 ;

"key": "a", "key": "s" 등을 필터링합니다.

이것이 가능합니까?

답변

1

확인을, 그래서 나는이 문제를 해결했다.

PUT $host/$index :

{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "min_length_5_filter": { 
        "type": "length", 
        "min": 5, 
        "max": 256 
       } 
      }, 
      "analyzer": { 
       "variable_name_analyzer": { 
        "type": "custom", 
        "tokenizer": "lowercase", 
        "filter": ["min_length_5_filter"] 
       } 
      } 
     } 
    } 
} 

다음 인덱스 매핑 :

PUT $host/$index/_mapping/$mapping_name :

... 
"parameters": { 
    "properties": { 
     "name": { 
      "type": "string", 
      "analyzer": "variable_name_analyzer" 
     }, 
     "value": { 
      "type": "string", 
      "analyzer": "variable_name_analyzer" 
     } 
    } 
}, 
... 

사용하여 다음과 같이 내가 읽고 사용자 지정 분석기를 사용하여 데이터를 인덱스 재 위의 메서드는 최소 길이를 사용하여 토큰 화 된 문자열을 필터링하여 많은 정크 값을 제거 할 수있게되었으며 이제는 "용어 집계"가 작동합니다. 정말 잘. 이 사람을 도움이되기를 바랍니다!

1

은 당신이 원하는 결과를 가지고하는 Regexp Filter를 사용한다고 생각 :

"filter": { 
     "regexp":{ 
      "value" : ".{2,}" 
     } 
    } 
+0

좋은 제안, 고마워! 문제는 변수가 문장에 저장된다는 것입니다. 예 : "1970-01-01 00:00:00 초"또는 "풍속 (시간당 마일)". 대신 사용자 지정 분석기를 사용하여 다른 용어를 색인화하고 <5 자 길이의 키를 필터링합니다. –