Nouveau ici pour Elasticsearch et essayer de mieux comprendre la différence entre ces requêtes. Autant que je sache, term
correspond à un seul terme (doit-il être minuscule pour que la correspondance fonctionne?), Et à la fois match phrase
et query string
correspond à une chaîne de texte.
term
la requête correspond à un terme unique tel qu'il est: la valeur est non analysée . Donc, il ne doit pas nécessairement être mis en minuscule en fonction de ce que vous avez indexé.
Si vous avez fourni Bennett
au moment de l'index et que la valeur n'est pas analysée, la requête suivante ne renverra rien:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
query analysera les données saisies si des analyseurs sont définis pour le champ demandé et trouvera les documents correspondant aux critères suivants:
Par exemple, si vous indexez les documents suivants (en utilisant standard
analyseur pour le champ foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Cette match_phrase
query ne renverra que les premier et deuxième documents:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
interrogation par défaut sur un champ _ all qui contient le texte de plusieurs champs de texte à la fois. De plus, il est analysé et prend en charge certains opérateurs (AND/OR ...), les caractères génériques, etc. (voir syntaxe associée ).
Comme le match_phrase
requêtes, l’entrée est analysée en fonction de l’analyseur défini dans le champ demandé.
Contrairement au match_phrase
, il n’est pas nécessaire que les termes obtenus après analyse soient dans le même ordre, sauf si l’utilisateur a utilisé des guillemets autour de l’entrée.
Par exemple, en utilisant les mêmes documents qu'auparavant, cette requête renverra tous les documents:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Mais cette requête retournera les 2 mêmes documents que le match_phrase
requete :
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
Il y a beaucoup à dire sur les différentes options pour ces requêtes, veuillez consulter la documentation correspondante:
J'espère que c'est assez clair et que ça va aider.
Je pense que quelqu'un cherche vraiment des différences entre eux en ce qui concerne RECHERCHE PARTIELLE Voici mon analyse avec default ‘analyseur standard’: -
Supposons, nous avons des données: -
{"nom": "Bonjour"}
Maintenant si nous voulons faire une recherche partielle avec ell ???
Requête de terme OR Requête de correspondance
{"term":{"name": "*ell*" }
Ne fonctionnera pas, retour en notant.
{"term":{"name": "*zz* *ell*" }
Ne fonctionnera pas, retour en notant.
Conclusion - Le terme ou la correspondance n'est pas capable de faire une recherche partielle
wildcard Requête: -
{"wildcard":{"name": "*ell*" }
Va-t-il donner le résultat {"name": "Hello"}
{"wildcard":{"name": "*zz* *ell*" }
Ne fonctionnera pas, retour en notant.
Conclusion - le joker est capable de faire une recherche partielle avec un seul jeton
Chaîne de requête :-
{"query_string": {"default_field": "name","query": "*ell*"}
Va-t-il donner le résultat {"name": “Hello”}
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
Cela fonctionnera donner le résultat {"name": “Hello”}.
Conclusion - query_string est capable de chercher avec deux jetons sont donnés
-> ici les jetons sont ell et zz