2013-12-12 3 views
1

다음 쿼리를 사용하여 ElasticSearch 검색을 실행하려고합니다. ES에 익숙하지 않기 때문에 내 무지를 용서해주십시오. 그리고 나는이 문서를 따르려고 시행 착오를 거듭하면서 이걸 함께 엮어 냈습니다. 기본적으로 예상대로 작동하는 유일한 부분은 보낸 사람, 크기, 정렬 및 심각도 일치입니다. 도움을 주셔서 미리 감사드립니다!ElasticSearch가 예상 결과를 반환하지 않습니다.

{ 
    "from":0, 
    "size":50, 
    "sort":{"timestamp":{"order":"desc"}}, 
    "query":[ 
     { 
     "range":{ 
      "timestamp":{"gte":"2013-11-18T05:00:00+00:00","lte":"2013-12-02T05:00:00+00:00"} 
     } 
     }, 
     { 
     "query":{ 
      "match":{"severity":{"query":"medium","operator":"or"}} 
     } 
     }, 
     { 
     "query":{ 
      "constantScore":{ 
      "filter":{ 
       "query":{ 
       "query_string":{"default_field":"_all","query":"10.1.10.22"} 
       } 
      } 
      } 
     } 
     } 
    ] 
} 
+0

질문에 세부 사항이 충분하지 않습니다. 당신의 데이터는 무엇입니까? 너 뭐하려고? 너는 무엇을 기대하고 있니? 너 뭐 돌아온거야? 이들에 대한 샘플을 포함하십시오. 데이터 샘플 삽입 요청을 포함하는 것이 가장 좋습니다. –

+0

세부 사항이 부족해서 죄송합니다. 내 목표는 사용자의 입력을 기반으로 데이터를 반환하는 것입니다. 사용자는 시작/종료 날짜, 심각도 (낮음, 보통 및 높음) 및 검색 키워드를 제공합니다. 결과를 얻지 만 예상대로 필터링하지 않았습니다. 모든 날짜 범위가 반환되고 query_string 쿼리의 문자열로 필터링되지 않는 결과가 나타납니다. – SpacePope

+0

올바른 쿼리를 작성하려면 ES의 Query DSL을 읽어야합니다. 당신은 질문이 완전히 잘못되었습니다. 귀하의 경우에는 "검색 키워드"를 쿼리하는 쿼리와 "시작/종료", "서버 리티"를 필터링하는 필터가 필요합니다. 둘 다 검색 요청에서 수행 할 수 있습니다. –

답변

2

Query DSL에 대해 더 자세히 알고 싶습니다. 먼저 부울 필터를 사용하여 데이터를 필터링 여기에 "AND"로 이해 될 수있다 "한다"- :

{ 
    "query": { 
    "query_string": { 
     "default_field": "_all", 
     "query": "10.1.10.22" 
    } 
    }, 
    "filter": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "timestamp": { 
       "gte": "2013-11-18T05:00:00+00:00", 
       "lte": "2013-12-02T05:00:00+00:00" 
      } 
      } 
     }, 
     { 
      "term": { 
      "severity": "medium" 
      } 
     } 
     ] 
    } 
    } 
} 

위의 쿼리는 다음과 같이 설명 할 수있다 : 여기에 귀하의 의견에 따라 올바른 쿼리입니다. 따라서 데이터는 "timestamp in range ..."및 "serverity = medium"으로 필터링됩니다. - "query_string"을 사용하여 필터링 된 데이터 검색 그러면 검색 속도가 훨씬 빨라집니다.

+0

둑 - 정말 고마워요. 그게 진짜로 올바른 길을 가고 있어요. 이것에 대해서는 명확하지 않지만 사용자는 여러 심각도를 선택할 수 있습니다. 따라서 사용자는 검색하려는 심각도로 "중간"및 "낮음"을 제출할 수 있습니다. 귀하의 "용어"필터를 다음으로 변경했습니다 : '{ "일치": "심각도": { "검색어": "중간 낮음", "연산자": "또는}}} 에 대한 서식을 용서하십시오 그 말이 옳게 보이지는 않습니다. 그러나 보시다시피, 나는 "용어"대신 "일치"필터를 사용하려고합니다. 다음 오류가 발생합니다. [일치]]에 등록 된 필터가 없습니다. 마지막으로 도움이 되었습니까? 감사! – SpacePope

+0

방금 ​​전 문서를 참조했는데 잘못된 섹션을 찾고있었습니다. 필터에는 "일치"쿼리가 없습니다. 그래서 저는 대신에 "should"필터를 사용하려고합니다 : ''should ": {{"term ": {"severity ":"medium "}}, {"term ": {"severity ":"low "} }]' 그러나 이것으로'Parse Failure [요소 [term]]에 대한 파서 없음]; '모든 단서? – SpacePope

+0

최종 업데이트. "bool"바깥에 "should"필터가 있습니다. 나는 그것을 안으로 옮겼고 모든 것이 좋다. Duc에게 감사드립니다. 투표 할 때까지 할 수 있으면 두 번 할거야! – SpacePope

관련 문제