2017-03-29 5 views
0

elasticsearch 쿼리의 성능을 향상 시키려고합니다. 쿼리의 목표는 쿼리와 일치하는 문서를 검색하는 것이므로 점수가 중요하지 않으며 하루에 인덱스가 있다는 점도 중요합니다. 지금까지 내가 아는 한, 득점 계산을 피하면서 필터를 사용하는 것이 더 낫다.하지만 모든 문서 스코어 1을 검색하는 finter 내부 쿼리를 사용하는 대안이있다. 그래서 첫 번째 쿼리는 followig : 필터, 쿼리 또는 둘 모두를 사용하여 elasticsearch 쿼리를 최적화하십시오.

{ 
"filter": { 
    "bool": { 
    "must": [{ 
    "match": { 
     "from": "[email protected]" 
    } 
    }, { 
    "range": { 
     "receivedDate": { 
     "gte": "date1", 
     "lte": "date2" 
     } 
    } 
    } 
    ] 
    } 
} 
} 

는 그럼 난 내 첫 번째 테스트를했고 나는 "쿼리"를위한 "필터"로 변경 내가 "쿼리"다음 "필터"를 사용하여 더 나은 시간을 얻을 때, 즉, 왜 내 첫 번째 질문의 대부분? 쿼리보다 느린 필터를 사용하려면 어떻게해야합니까?

나는 그것을 개선하기 위해 노력하고 계속 읽어보다 후 나는이있어 : 내가 인상이 조금 개선되었습니다이 후자

{ 
    "query": { 
     "bool": { 
      "must": { 
       "match_all": {} 
      }, 
      "filter": { 
       "bool": { 
        "must": [{ 
          "match": { 
           "from": "[email protected]" 
          } 
         }, { 
          "range": { 
           "receivedDate": { 
            "gte": "date1", 
            "lte": "date2" 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

. 그래서 당신의 경험에 따라 더 빠른 결과를 얻기 위해서는 어떤 것이 더 나은지 (적어도 이론적으로) 말해 줄 수 있습니까? 또한이 쿼리 중 하나를 사용하면 결과를 캐시하여 앞으로의 쿼리를 개선 할 가능성이 있습니다. 이 쿼리를 만드는 더 좋은 방법이 있습니까? 귀하의 도움에 미리 감사드립니다. 나는 Elasticsearch v2.3을 사용하고 있음을 잊어 버렸습니다.

+0

은'from' 필드의 매핑은 무엇입니까? – Val

+0

필드가 분석되지 않았기 때문에 나는 또한 변화 성냥 문장을 테스트 중이라는 것을 잊었습니다. 그래서 필드에서 문자열 not_analyzed이며 receivedDate 날짜입니다 – Joseratts

답변

1

첫 번째 쿼리에서는 post_filter만을 사용했습니다. 두 번째 쿼리 갈 수있는 방법이지만이 (포장 할 필요 bool/must 내부 bool/filter)에 최적화 할 수 있습니다 :

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "range": { 
      "receivedDate": { 
       "gte": "date1", 
       "lte": "date2" 
      } 
      } 
     }, 
     { 
      "term": { 
      "from": "[email protected]" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

행운이? – Val