Quelle est la différence entre le must et le filter dans la requête DSL dans elasticsearch?

je suis nouveau à la recherche élastique et je suis confondu entre le must et le filter. 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 correspondant à la fois les termes, et sur l'utilisation de filtre comme ceci

POST / xyz/_search

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

j'obtiens le même résultat, donc quand dois-je utiliser doit et quand dois-je utiliser le filtre? Qu'est-ce que l' la différence?

20
demandé sur Custodio 2017-04-11 17:37:17

1 réponses

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

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 le vérifier lien

Score

le score de pertinence de chaque document est représenté par un nombre flottant positif appelé _score. Plus le _score, le plus la pertinence du document.

une clause query génère un _score pour chaque document.

pour savoir comment le score est calculé, référez ceci lien

23
répondu Vijay Gupta 2017-05-04 06:03:01