web-dev-qa-db-fra.com

Quelle est la différence entre must et filter dans Query DSL dans elasticsearch?

Je suis nouveau dans la recherche élastique et je suis confus entre le moût et le filtre. Je veux effectuer une opération entre mes conditions, j'ai donc fait cela

POST/xyz/_search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "city": "city1"
                    }
                },
                {
                    "term": {
                        "saleType": "sale_type1"
                    }
                }
            ]
        }
    }
}

ce qui m'a donné les résultats requis correspondant aux deux termes, et sur l'utilisation d'un filtre comme celui-ci

POST/xyz/_search

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "city": "city1"
                    }
                }
            ],
            "filter": {
                "term": {
                    "saleType": "sale_type1"
                }
            }
        }
    }
}

J'obtiens le même résultat, alors quand dois-je utiliser le moût et quand dois-je utiliser le filtre? Quelle est la différence?

40
Krash

must contribue au score. Dans filter, le score de la requête est ignoré.

Dans must et filter, la clause (requête) doit apparaître dans les documents correspondants. C'est la raison pour obtenir les mêmes résultats.

Vous pouvez vérifier cela lien

But

Le score de pertinence de chaque document est représenté par un nombre à virgule flottante positif appelé _score. Plus le _score, plus le document est pertinent.

Une clause de requête génère un _score pour chaque document.

Pour savoir comment le score est calculé, reportez-vous à cette lien

46
Vijay Gupta