Elastic Search: Différence entre «Term», «Match Phrase» et «Query Ssortingng»

Nouveau ici pour la recherche élastique et pour essayer de mieux comprendre la différence entre ces requêtes. Autant que je sache, les correspondances de term un seul terme (doit être en minuscule pour que la correspondance fonctionne?), Et les deux match phrase une chaîne de texte.

term requête correspond à un seul terme tel quel: la valeur n’est pas analysée . Donc, il n’est pas nécessaire que ce soit en lettres minuscules en fonction de ce que vous avez indexé.

Si vous avez fourni Bennett à l’index et que la valeur n’est pas analysée, la requête suivante ne renverra rien:

 { "query": { "term" : { "user" : "bennett" } } } 

match_phrase requête match_phrase parsingra l’entrée si les parsingurs sont définis pour le champ interrogé et recherche les documents correspondant aux critères suivants:

  • tous les termes doivent apparaître dans le champ
  • ils doivent avoir le même ordre que la valeur d’entrée

Par exemple, si vous indexez les documents suivants (en utilisant standard parsingur standard pour le champ foo ):

 { "foo":"I just said hello world" } { "foo":"Hello world" } { "foo":"World Hello" } 

Cette requête match_phrase uniquement les premier et deuxième documents:

 { "query": { "match_phrase": { "foo": "Hello World" } } } 

query_ssortingng recherche par défaut sur un champ _all contenant le texte de plusieurs champs de texte à la fois. En plus de cela, il est analysé et prend en charge certains opérateurs (AND / OR …), les caractères génériques, etc. (voir la syntaxe associée ).

En match_phrase requêtes match_phrase , l’entrée est analysée en fonction de l’parsingur défini dans le champ interrogé.

Contrairement à match_phrase , les termes obtenus après l’parsing ne doivent pas nécessairement être dans le même ordre, à moins que l’utilisateur n’ait 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_ssortingng": { "query": "hello World" } } } 

Mais cette requête retournera les mêmes 2 documents que la requête match_phrase :

 { "query": { "query_ssortingng": { "query": "\"Hello World\"" } } } 

Il y a beaucoup plus à dire sur les différentes options pour ces requêtes, veuillez consulter la documentation associée:

  • terme
  • match_phrase
  • chaîne de requête

J’espère que c’est assez clair et que cela aidera.

Je pense que quelqu’un cherche certainement des différences entre eux en ce qui concerne la recherche partielle Voici mon parsing avec «parsingur standard» par défaut: –

Supposons que nous ayons des données: –

{“nom”: “Bonjour”}

Maintenant, si nous voulons faire une recherche partielle avec ell ???

Requête de terme ou requête de correspondance

 {"term":{"name": "*ell*" } 

Ne fonctionnera pas, notez bien.

 {"term":{"name": "*zz* *ell*" } 

Ne fonctionnera pas, notez bien.

Conclusion – Term ou Match n’est pas en mesure d’effectuer une recherche partielle du tout

caractère générique Requête: –

 {"wildcard":{"name": "*ell*" } 

Travaillera-t-il pour donner le résultat {“name”: “Hello”}

 {"wildcard":{"name": "*zz* *ell*" } 

Ne fonctionnera pas, notez bien.

Conclusion – les caractères génériques peuvent effectuer une recherche partielle avec un seul jeton

Chaîne de requête :-

 {"query_ssortingng": {"default_field": "name","query": "*ell*"} 

Travaillera-t-il pour donner le résultat {“name”: “Hello”}

 {"query_ssortingng": {"default_field": "name","query": "*zz* *ell*" } 

Travaillera-t-il pour donner le résultat {“name”: “Hello”}.

Conclusion – query_ssortingng est capable de rechercher avec deux jetons sont donnés

-> ici le jeton est ell et zz