Les index de full-text sont nommés par les développeurs. Un même nom ne peut pas être partagé entre les index de full-text au sein d'un graphset.
- 2 ~ 64 caractères
- Doit commencer par des lettres
- Autorisé à utiliser des lettres, des underscores et des chiffres ( _ , A-Z, a-z, 0-9)
index-1i9q251ak.js:2 Nom de la table retournée :
_nodeFulltext
,_edgeFulltext
En-tête de la table retournée :name
|properties
|schema
|status
(Nom, properties, schema et statut [creating|done] du full-text)
Syntaxe :
// Pour afficher tous les index full-text dans le graphset actuel (les full-texts de node et edge dans des tables séparées)
show().fulltext()
// Pour afficher tous les index full-text de node dans le graphset actuel
show().node_fulltext()
// Pour afficher tous les index full-text de edge dans le graphset actuel
show().edge_fulltext()
index-1i9q251ak.js:2 Les properties de type decimal ne prennent pas en charge l'index de full-text.
Syntaxe :
// Pour créer un index full-text pour une certaine property d'un certain schema de node dans le graphset actuel
create().node_fulltext(@<schema>.<property>,"<name>")
// Pour créer un index full-text pour une certaine property d'un certain schema d'edge dans le graphset actuel
create().edge_fulltext(@<schema>.<property>,"<name>")
Exemple : Créer un index full-text nommé "prodDesc" pour la property @product description
create().node_fulltext(@product.description, "prodDesc")
index-1i9q251ak.js:2 Supprimer une property supprimera également son index de full-text.
Syntaxe :
// Pour supprimer un index full-text pour une certaine property de node du graphset actuel
drop().node_fulltext("<name>")
// Pour supprimer un index full-text pour une certaine property d'edge du graphset actuel
drop().edge_fulltext("<name>")
Exemple : Supprimer l'index full-text nommé 'prodDesc'
drop.().node_fulltext("prodDesc")
index-1i9q251ak.js:2 Le filtre de full-text d'Ultipa permet une recherche full-text à grande vitesse, c'est un scénario d'implémentation important du filtre Ultipa. Il utilise l'opérateur conditionnel contains
pour juger si un index de full-text contient TOUS les mots-clés spécifiés. Il y a deux critères pour juger 'contains' :
- Recherche précise
- les mots segmentés sont totalement égaux aux mots-clés
- lorsque la bibliothèque de mots segmentés ne contient pas les mots-clés recherchés, cela peut conduire à aucun résultat
- Recherche floue
- les mots segmentés commencent par un mot-clé
- maximiser la possibilité de trouver les nodes et edges (leurs properties) qui contiennent les mots-clés recherchés, mais coûte beaucoup de temps par rapport à la recherche précise
La recherche floue est toujours recommandée à moins que l'utilisateur ait une demande claire de correspondance précise.
Syntaxe : {~<fulltext> contains "<keyword1> <keyword2> ..."}
où l'espace est utilisé pour séparer plusieurs <keyword>
, et doit utiliser une barre oblique \
comme préfixe s'il y a des guillemets anglais dans un <keyword>
; <keyword>
utilisé pour la correspondance floue doit se terminer par un astérisque *
.
Requête Node/Edge
Exemple : Trouver des produits qui contiennent les mots-clés 'graph' et 'database' par l'index full-text nommé 'prodDesc'
find().nodes({~prodDesc contains "graph database"}) return nodes
Exemple : Trouver des produits qui contiennent les mots-clés 'graph' ou 'database' par l'index full-text nommé 'prodDesc'
find().nodes({~prodDesc contains "graph" || ~prodDesc contains "database"}) return nodes
Exemple : Trouver des produits qui contiennent 'graph', et les mots commencent par 'ult' par l'index full-text nommé 'prodDesc'
find().nodes({~prodDesc contains "graph ult*"}) return nodes
Requête Template
Exemple : Recherche floue pour 10 paths qui commencent par des comptes ayant un mot segmenté 'capital*', arrivent d'abord aux comptes ayant un mot segmenté 'investment*', puis arrivent aux comptes ayant un mot segmenté 'AI*', utiliser l'index full-text 'companyName'
n({~companyName contains "capital*"}).e().n({~companyName contains "investment*"})
.e().n({~companyName contains "AI*"}) as paths
return paths{*} limit 10
Exemple : Recherche floue pour 10 paths des comptes 'Sequoia*' aux comptes 'Hillhouse*' en 5 étapes, utiliser l'index full-text 'companyName'
n({~companyName contains "Sequoia*"}).e()[:5].n({~companyName contains "Hillhouse*"}) as paths
return paths{*} limit 10
Note : Étant donné un réseau de connaissances GP/LP ou un réseau de connaissances commerciales, les règles de requête ci-dessus sont équivalentes à un réseau adhoc profond des sociétés 'Sequoia' et 'Hillhouse'. La même opération nécessite de nombreuses interventions manuelles ou exécutions par lots dans un système manuel ou de triple vérification. Avant qu'Ultipa n'invente la recherche full-text basée sur les modèles, une requête comme celle-ci était impensable ! Maintenant, cela peut être fait avec facilité, élégance et en temps réel.