[elasticsearch] MUST와 SHOULD 부울 쿼리의 탄력적 검색 차이

ES의 쿼리 MUSTSHOULDbool 쿼리 의 차이점은 무엇입니까 ?

나는 경우 그때 사용해야 내 용어를 포함하는 결과를 원하는 must?

특정 값만 포함 해야하는 쿼리가 있으며 오늘 시간 / 날짜보다 날짜 / 타임 스탬프가 낮은 결과는 없습니다-NOW

또한

아래 코드와 같이 must 안에 여러 필터를 사용할 수 있습니까?

"filtered": {
"filter": {
"bool" : {
        "must" : {
            "term" : { "type" : 1 }
            "term" : { "totals" : 14 }
            "term" : { "groupId" : 3 }
            "range" : {
                "expires" : {
                    "gte": "now"
                }
            }
        },



답변

반드시 : 절 (쿼리)이 일치하는 문서에 나타나야합니다. 이 절은 논리 AND와 같이 일치해야합니다 .

다음을 의미해야합니다 . 논리 OR 과 같이이 절 중 하나 이상이 일치해야합니다 .

기본적으로 논리 연산자 AND 및 OR처럼 사용됩니다. 참조 .

이제 부울 쿼리에서 :

필수 사항 : 문서를 포함 하려면 일치 해야하는 절입니다 .

의미 해야 합니다.이 절이 일치하면 _score; 그렇지 않으면 효과가 없습니다. 각 문서의 관련성 점수를 세분화하는 데 사용됩니다.


must. 내부에 여러 필터를 사용할 수 있습니다 .


답변

이것은 인기있는 질문이므로 Elasticsearch 버전 2에서는 약간 변경되었음을 추가하고 싶습니다.

filtered쿼리 대신 bool최상위 수준에서 쿼리를 사용해야 합니다.

must부품 점수에 신경 쓰지 않으면 해당 부품을 filter핵심에 넣으십시오 . 점수 없음은 빠른 검색을 의미합니다. 또한 Elasticsearch는 캐시 여부 등을 자동으로 파악하여 must_not캐싱에도 동일하게 유효합니다.

참조 : https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

또한 "gte": "now"밀리 초 단위로 인해 캐시 할 수 없습니다. must절 에서 두 개의 범위를 사용하십시오 . 하나는 now/1h다른 것과 함께 다른 하나 now는 작은 결과 세트에서 가속화되는 정확한 필터링을 위해 첫 번째는 잠시 동안 캐시 될 수 있습니다.


답변

문서 에서 말했듯이 :

필수 : 절 (쿼리)이 일치하는 문서에 나타나야합니다.

해야 할 일 : 절 (쿼리)이 일치하는 문서에 나타나야합니다. must 절이없는 부울 쿼리에서 하나 이상의 should 절이 문서와 일치해야합니다. 최소 일치해야하는 절 수는 minimum_should_match 매개 변수를 사용하여 설정할 수 있습니다.

즉, 결과는 일치되어야 할 것이다 모든 쿼리가 존재 해야의 절 (또는 일치하는 적어도 하나해야 더이없는 경우 절을 해야의 절.

결과가 모든 쿼리를 만족 시키려면 must 을 사용해야 합니다 .


부울 쿼리 내에서 실제로 필터를 사용할 수 있습니다.


답변