MatchQL (Match Query Language) est la syntaxe JSON pour requêter les API Pertinence.
Voici la structure globale d'une requête MatchQL :
{
"return": {
"fields": [...],
"from": ...,
"size": ...,
"compatibility_for": {
"field": "...",
"values": [...]
},
"sort": [
{
"field": "...",
"order": "..."
},
...
]
},
"criteria": [
{
"field": "...",
"priority_weight": "...",
"priority_order": "...",
"clause": [
{
"operator": "...",
"expression": ...
},
...
]
},
...
]
}
Propriété | Type | Commentaire |
---|---|---|
return | object | Objet qui spécifie ce que l'on souhaite en retour de l'API |
return.fields | array | Liste des champs (avec leur valeur) que l'on souhaite récupérer dans les documents matchés. Le nombre de champs est limité à 20 au maximum |
return.from | integer | Offset du premier résultat à retourner. Démarrer à 0 |
return.size | integer | Nombre de résultats à retourner depuis l'offset from. Le nombre de résultats est limité à 1000 au maximum. Attention : plus les résultats à retourner seront nombreux, plus votre applicatif sera lent. Nous conseillons de limiter à moins de 50 résultats retournés puis d'utiliser ensuite la pagination |
compatibility_for | object | À spécifier uniquement pour l'API Compatibility. Indique sur quels documents on va calculer une compatibilité |
compatibility_for.field | string | Nom du champ qui servira à récupérer les documents pour lesquels il faut calculer une compatibilité. Le champ doit être de type double ou keyword Conseil : nous conseillons de mettre un identifiant (id) unique. Il est donc nécessaire que vos données aient été indexées au préalable avec un champ qui correspond à un identifiant unique |
compatibility_for.values | array | Liste des valeurs du champ qui sert à récupérer les documents |
sort | array | Tableau spécifiant l'ordonnancement des résultats. Note : l'ordonnancement par défaut des résultats est le scoring dont le nom du champ (field) est "_score" |
sort[n].field | string | Nom du champ d'ordonnancement. Le champ doit être de type double, keyword ou date |
sort[n].order | string | Ordre d'ordonnancement. Peut valoir asc ou desc |
criteria | array | Tableau d'objets qui spécifie les critères de la requête. Chaque objet du tableau est relié par un OU logique. Par défaut, le moteur Pertinence va essayer de trouver les documents qui satisfont tous les critères. Mais si ce n'est pas possible, il va trouver les documents qui satisfont au mieux la plupart des critères, en fonction de la pondération et de la priorité |
criteria[n].field | string | Nom de champ |
criteria[n].priority_weight | string | Pondération du critère. Peut valoir default (valeur par défaut spécifiée lors de la configuration du moteur), mandatory, necessary, important ou optional |
criteria[n].priority_order | string | Priorité du critère parmi les autres critères de même pondération. Peut valoir default (valeur par défaut spécifiée lors de la configuration du moteur) ou un nombre entier positif |
clause | array | Liste d'objets représentant les opérations à appliquer sur le champ. Chaque objet du tableau est relié par un ET logique |
clause[n].operator | string | Opérateur de la clause. La liste des opérateurs disponibles par type de champ est explicitée dans la section qui suit |
clause[n].expression | various | Expression de la clause. La liste des expressions disponibles par type de champ et opérateur est explicitée dans la section qui suit |
Liste des clauses (operator / expression) possibles selon chaque type de champ
operator | expression | Exemple |
---|---|---|
equal Égal à... |
true ou false |
|
not_equal Différent de... |
true ou false |
|
operator | expression | Exemple |
---|---|---|
equal Égal à... |
Nombre réel |
|
not_equal Différent de... |
Nombre réel |
|
greater_than Strictement supérieur à... |
Nombre réel |
|
less_than Strictement inférieur à... |
Nombre réel |
|
greater_than_or_equal Supérieur ou égal à... |
Nombre réel |
|
less_than_or_equal Inférieur ou égal à... |
Nombre réel |
|
include Spécifie une clause où le champ vaut au moins une des valeurs de l'expression. Équivalant du IN (...) en SQL |
Tableau de nombres réels |
|
exclude Spécifie une clause où le champ est différent de toutes les valeurs de l'expression. Équivalant du NOT IN (...) en SQL |
Tableau de nombres réels |
|
operator | expression | Exemple |
---|---|---|
equal Égal à... |
Chaîne de caractères |
|
not_equal Différent de... |
Chaîne de caractères |
|
include Spécifie une clause où le champ vaut au moins une des valeurs de l'expression. Équivalant du IN (...) en SQL |
Tableau de chaîne de caractères |
|
exclude Spécifie une clause où le champ est différent de toutes les valeurs de l'expression. Équivalant du NOT IN (...) en SQL |
Tableau de chaîne de caractères |
|
operator | expression | Exemple |
---|---|---|
match Spécifie une clause où le champ correspond le mieux au texte de l'expression |
Texte |
|
not_match Spécifie une clause où le champ ne contient pas le texte de l'expression |
Texte |
|
include Spécifie une clause où le champ vaut au moins une des valeurs de l'expression. Équivalant du IN (...) en SQL |
Tableau de chaîne de textes |
|
exclude Spécifie une clause où le champ est différent de toutes les valeurs de l'expression. Équivalant du NOT IN (...) en SQL |
Tableau de chaîne de textes |
|
operator | expression | Exemple |
---|---|---|
equal Égal à... |
Date UTC |
|
not_equal Différent de... |
Date UTC |
|
greater_than Strictement supérieur à... |
Date UTC |
|
less_than Strictement inférieur à... |
Date UTC |
|
greater_than_or_equal Supérieur ou égal à... |
Date UTC |
|
less_than_or_equal Inférieur ou égal à... |
Date UTC |
|
include Spécifie une clause où le champ vaut au moins une des valeurs de l'expression. Équivalant du IN (...) en SQL |
Date UTC |
|
exclude Spécifie une clause où le champ est différent de toutes les valeurs de l'expression. Équivalant du NOT IN (...) en SQL |
Date UTC |
|
operator | expression | Exemple |
---|---|---|
boxed_in Spécifie une clause où le champ est géométriquement contenu dans le rectangle spécifié par l'expression. |
Objet JSON |
|
polygoned_in Spécifie une clause où le champ est géométriquement contenu dans le polygone spécifié par l'expression. |
Objet JSON |
|
multipolygoned_in Spécifie une clause où le champ est géométriquement contenu dans le multipolygone spécifié par l'expression. |
Objet JSON |
|
circled_in Spécifie une clause où le champ est géométriquement contenu dans le cercle spécifié par l'expression. |
Objet JSON |
|
operator | expression | Exemple |
---|---|---|
intersect Spécifie une clause où le champ a une intersection géometrique avec la forme spécifiée par l'expression. |
Objet JSON |
|
contain Spécifie une clause où le champ contient géométriquement la forme spécifiée par l'expression. |
Objet JSON |
|
Exemples complets de requêtes avec la syntaxe MatchQL, qui se basent sur l'index de la démo en ligne pour l'immobilier
{
"return": {
"fields": ["id", "title_formatted", "city_name", "city_postal_code", "listing_type", "property_type", "price", "updated_date"],
"from": 0,
"size": 20,
"sort": [{
"field": "updated_date",
"order": "desc"
},
{
"field": "_score",
"order": "asc"
},
{
"field": "id",
"order": "asc"
}
]
},
"criteria": [{
"field": "terrasse",
"priority_weight": "important",
"priority_order": "default",
"clause": [{
"operator": "equal",
"expression": true
}]
},
{
"field": "price",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "greater_than_or_equal",
"expression": 300000
}, {
"operator": "less_than_or_equal",
"expression": 500000
}]
},
{
"field": "property_type",
"priority_weight": "necessary",
"priority_order": 1,
"clause": [{
"operator": "include",
"expression": ["house", "flat"]
}, {
"operator": "exclude",
"expression": ["parking"]
}]
},
{
"field": "region_name",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "match",
"expression": "France"
}]
},
{
"field": "updated_date",
"priority_weight": "optional",
"priority_order": "default",
"clause": [{
"operator": "greater_than_or_equal",
"expression": "2016"
}, {
"operator": "less_than_or_equal",
"expression": "2020-01-01"
}]
},
{
"field": "geometry",
"priority_weight": "mandatory",
"priority_order": 2,
"clause": [{
"operator": "circled_in",
"expression": {
"point": {
"type": "Point",
"coordinates": [2.344847, 48.850861]
},
"distance": 20,
"unit": "km"
}
}]
}
]
}
✎ Éditer ou exécuter cette requête en ligne : https://reqbin.com/c-ktrn2gn4
{
"return": {
"fields": ["id", "city_name", "city_postal_code", "listing_type", "property_type", "price"],
"from": 0,
"size": 20,
"compatibility_for": {
"field": "id",
"values": [28853,28854]
},
"sort": [{
"field": "updated_date",
"order": "desc"
},
{
"field": "id",
"order": "asc"
}
]
},
"criteria": [{
"field": "alarme",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "equal",
"expression": true
}]
},
{
"field": "transport_transport",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "greater_than_or_equal",
"expression": 4
}, {
"operator": "less_than_or_equal",
"expression": 5
}]
},
{
"field": "listing_type",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "include",
"expression": ["buy"]
}]
},
{
"field": "region_name",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "match",
"expression": "France"
}]
},
{
"field": "updated_date",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "greater_than_or_equal",
"expression": "2016"
}]
},
{
"field": "geometry",
"priority_weight": "default",
"priority_order": "default",
"clause": [{
"operator": "circled_in",
"expression": {
"point": {
"type": "Point",
"coordinates": [2.344847, 48.850861]
},
"distance": 20,
"unit": "km"
}
}]
}
]
}
✎ Éditer ou exécuter cette requête en ligne : https://reqbin.com/c-bymkowyt
Vous souhaitez implémenter du Matching ou du Scoring sur votre site ou votre application ? Nous sommes à votre écoute pour vous accompagner.
Réponse rapide !