2017-09-27 7 views
0

두 쿼리의 개수로 나눗셈을 표시하는 lucene 표현식을 만들려고합니다. 두 쿼리 모두 텍스트 정보를 포함하며 두 결과는 모두 메시지 필드에 있습니다. 이 글을 올바르게 쓰는 방법을 모르겠습니다. 내가하는 것입니다 원하는 "500 error"키바나에서 서로 다른 두 개의 쿼리를 나누기

-로 텍스트를 포함 "404 not found"

초 쿼리 message을위한 - 지금까지 내가 한 일을 운없이 -로

doc['message'].value/doc['message'].value 

첫 번째 쿼리 message에 대한 텍스트를 포함 count(404 not found)/count(500 error)

어떤 도움을 주셔서 감사합니다.

+0

은 내가 당신을 도울 수 있다고 생각 연산 식 달성하기 위해

 "script": { "inline": "four_oh_fours/(five_hundreds == 0 ? 1 : five_hundreds)", "lang": "expression" } 

스크립트 여기 업데이트 : 그냥 다음에 위의 스크립트 값을 대체 : 정확히 "404 찾을 수 없음"을 포함하는 고유 한 문서의 양을 정확히 "500 오류"출력을 플로트로 포함하는 고유 한 문서의 수량으로 나눈 계산이 필요합니까? 그렇다고 가정하면 메시지 필드가 "키워드"유형으로 매핑됩니까? 그렇지 않다면, 내가 원하는 결과물에 대해 좀 더 명확하게 설명 할 필요가 있습니다. – Miek

+0

@MikeMichaels 예 메시지 필드가 "키워드"유형으로 매핑되기를 원하는 출력에 맞습니다. – jonny

답변

1

이 같은 클라이언트 측에서 계산을 그냥 두 개의 수를 실행하는 데 크게 청소기 될 것이라고 면책 조항을 추가하고 수행하는거야 : 사용을 제외하고 뭔가를 (반환

GET /INDEX/_search 
{ 
    "size": 0, 
    "aggs": { 
    "types": { 
     "terms": { 
     "field": "type", 
     "size": 10 
     } 
    } 
    } 
} 

예제의 유형 대신 고유 한 키)를 사용하십시오.

"aggregations": { 
    "types": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
     { 
      "key": "Article", 
      "doc_count": 881 
     }, 
     { 
      "key": "Page", 
      "doc_count": 301 
     } 
     ] 
    } 

이것을 사용하여 고유 한 계수를 취하여 평균을 계산하십시오. 위의와

여기 스크립트 내 계산에 따라 집계 값을 반환한다 (하나의 요청을 통해) 난에서 조립 수 있었다 해키 방법 this

GET /INDEX/_search 
{ 
    "size": 0, 
    "aggs": { 
    "parent_agg": { 
     "terms": { 
     "script": "'This approach is a weird hack'" 
     }, 
     "aggs": { 
     "four_oh_fours": { 
      "filter": { 
      "term": { 
       "message": "404 not found" 
      } 
      }, 
      "aggs": { 
      "count": { 
       "value_count": { 
       "field": "_index" 
       } 
      } 
      } 
     }, 
     "five_hundreds": { 
      "filter": { 
      "term": { 
       "message": "500 error" 
      } 
      }, 
      "aggs": { 
      "count": { 
       "value_count": { 
       "field": "_index" 
       } 
      } 
      } 
     }, 
     "404s_over_500s": { 
      "bucket_script": { 
      "buckets_path": { 
       "four_oh_fours": "four_oh_fours.count", 
       "five_hundreds": "five_hundreds.count" 
      }, 
      "script": "return params.four_oh_fours/(params.five_hundreds == 0 ? 1: params.five_hundreds)" 
      } 
     } 
     } 
    } 
    } 
} 

이다, 언급된다.

누군가이 두 가지 방법을 제쳐두고 접근 할 수 있다면, 나는 그것을보고 싶을 것입니다. 희망이 도움이됩니다.

편집 - 고통없는 (기본값) 대신 "표현"유형을 통해 수행되는 동일한 스크립트. 난 그냥 확인 내가 제대로 질문을 이해하게하려면, Lucene을 통해 같은 일이

+0

제안 해 주셔서 감사합니다.하지만 lucene 표현을 사용하여이를 수행 할 수 있는지 알고 싶습니까? 나는 이것을 스크립팅하고 기대하는 다른 방법이 있다면 매우 새롭다. – jonny

+0

알기. 궁금한 점이 있다면, lucene 표현식과 고통스럽지 않은 스크립트로 작성하고자하는 특별한 이유가 있습니까 (예제에서와 같이)? – Miek

+0

우리는 누군가가 소유하고 고통없는 스크립팅을 사용하고 싶지 않은 클러스터에서 작업하고 있습니다. 그 lucene 표현을 제외하고 나보다 쉬워 보인다. – jonny