2017-09-23 2 views
1

J'essaie d'obtenir un extrait du texte avec les mots recherchés mis en évidence sur une collection JSON. Ma syntaxe de recherche est:Marklogic: "highlight" ne semble pas fonctionner avec Node.js et QueryBuilder

qb.word(qb.field('doc_text'),vartxt)

Avec 'doc_text' a déclaré que le champ (field type: root, include root: false, includes: doc_text), dans une application Node.js.

La recherche fonctionne bien, et il est bien fait dans ce domaine ... Mais txt[0].results[kl].matches[0]['match-text'], je trouve les 3 premières propriétés du JSON, et non pas un extrait de 'doc_text' avec les mots trouvés. J'ai une autre application dans laquelle les faits saillants fonctionnent correctement, mais elle est basée sur XML. Ai-je oublié quelque chose dans la déclaration de champ ou l'opération est-elle différente entre les données JSON et les données XML, ou le système de surbrillance n'est-il pas exécuté sur JSON via Node.js et QueryBuilder?

Amitiés

Répondre

0

Les champs ne fonctionnent pas tout à fait de la même manière en XML et JSON. Je pense que vous êtes en cours d'exécution dans cette limitation:

http://docs.marklogic.com/guide/app-dev/json#id_24090

La valeur d'un champ en XML peut être la concaténation de tous les nœuds de texte, mais le même ne s'applique pas JSON.

+0

J'avais déjà lu cette page. Je ne pense pas que cette limitation soit la cause du problème. Le champ est un champ simple, le contenu global d'un "pdftotext", sans sous-champ ou concaténation. Et la recherche fonctionne correctement .... – mbport

+0

La requête sur le XML est-elle aussi une requête sur le terrain? Snippeting (qui génère le texte correspondant pour JSON et XML) utilise la fonction cts.walk() du serveur, qui peut ne pas correspondre aux champs. – ehennum

+0

Oui, c'est exactement la même requête, basée sur node.js et querybuilder. – mbport

0

Je pense avoir compris !!!

Cette requête donne un extrait correct, avec l'extrait et les mots mis en évidence: mkcq.and (mkcq.collection ('document'), mkcq.word (mkcq.field ('doc_text'), 'connaitre'))

d'autre part, cette requête donne les 3 premiers champs du JSON: mkcq.and (mkcq.collection ('document'), mkcq.word (mkcq.field ('doc_text'), « connaitre '), mkcq.value (mkcq.element (' ',' doc_user '),' mbp '))

Je ne sais pas si c'est normal ou non, mais il devrait pouvoir être corrigé soit par un requête simplifiée et une sélection sur les enregistrements retournés, soir par un snippeter particulier.

Sincères salutations