2017-09-24 3 views
1

Je suis en train de configurer une recherche à facettes dans MarkLogic. Je les indices de gamme suivants configurés:Recherche et collisions à facettes Marklogic

enter image description here

C'est, j'ai deux indices. Le premier est sur l'espace de noms http://www.corbas.co.uk/ns/presentations et le nom local keyword. Le second a le nom local level. L'URI de collation pour les deux est http://marklogic.com/collation/en/S1.

Lorsque je tente de recherche à l'aide ce qui suit, je vois des erreurs liées à regroupement:

xquery version "1.0-ml"; 


import module namespace search = "http://marklogic.com/appservices/search" 
    at "/MarkLogic/appservices/search/search.xqy"; 

search:search("levels:Intermediate", 
<options xmlns="http://marklogic.com/appservices/search"> 
    <return-results>true</return-results> 
    <return-facets>true</return-facets> 

    <constraint name="keywords" facet="true"> 
    <range type="xs:string" collation="http://marklogic.com/collation/en/S1"> 
     <element ns="http://www.corbas.co.uk/ns/presentations" name="keyword"/> 
    </range> 
    </constraint> 
    <constraint name="levels" facet="true"> 
    <range type="xs:string" collation="http://marklogic.com/collation/en/S1"> 
     <element ns="http://www.corbas.co.uk/ns/presentations" name="level"/> 
    </range> 
    </constraint> 

</options>) 

Je reçois l'erreur suivante:

XDMP-ELEMRIDXNOTFOUND: cts:search(fn:collection(), 
cts:element-range query(fn:QName("http://www.corbas.co.uk/ns/presentations","level"), 
"=", "Intermediate", ("collation=http://marklogic.com/collation/en/S1"), 1), 
("score-logtfidf", "faceted", cts:score-order("descending")), 
xs:double("1"),()) -- No string element range index for 
{http://www.corbas.co.uk/ns/presentations}level 
collation=http://marklogic.com/collation/en/S1 

Qu'est-ce que je fais mal?

Répondre

1

Pour être honnête, je m'attendais à un message d'erreur différent. Je m'attendrais à ce que MarkLogic se plaint de ne pas trouver d'index pour le classement racine, car vous n'avez pas ajouté d'attributs collation sur les éléments range dans les options de recherche.

Peut-être que cela vous aidera.

HTH!

+0

Hmmm. J'ai l'air d'avoir mésadapté. Vous ne savez pas où sont passés les attributs de classement de la recherche - vous avez corrigé le code source - la même erreur s'applique. –

+0

Quelle serait l'implication du classement par défaut du serveur de l'application, celui indiqué sur l'index et celui qui ne correspond pas? Quelque chose comme ce symptôme? –

+0

Le classement par défaut sur app-server (ou dans le prologue de votre code) fournit un classement par défaut pour les fonctions cts et une comparaison de chaînes.Cela n'a d'effet que si vous ne spécifiez pas explicitement le classement. Toujours en spécifiant qu'il donne moins de surprises .. – grtjn

2

Message étrange. Si cela a même été le cas, il semble que le classement par défaut de votre base de données soit modifié. Ne répond pas à la question. juste étrange.

Forst off, je toujours ajouter le classement à la contrainte:

<search:range type="xs:string" facet="true" 
     collation="http://marklogic.com/collation/en/S1"> 

Deuxièmement, je résoudre toujours question d'index de gamme de la console de requête: utilisation cts:values() pour vérifier que vos index sont en place et l'espace de noms et la collation que vous attendez. Cela supprime les autres couches et vérifie que l'index est conforme à vos attentes.

Et un autre élément: les index de gamme MarkLogic n'existent pas tant que le contenu n'est pas indexé. Êtes-vous sûr de ne pas avoir désactivé l'indexation automatique sur la base de données et que le contenu n'est peut-être pas indexé? Cela vous donnerait une erreur.

+0

J'ai reconstruit la base de données (facile avec Roxy) et recréé l'index en utilisant le classement de la racine. Tout semble fonctionner maintenant mais je suis maintenant sûr que je peux voir * pourquoi *. L'index automatique était activé mais je suppose que j'aurais pu mettre la base de données dans une sorte d'état inhabituel en rechargeant constamment le contenu alors que j'essaie de comprendre ce problème! –

+0

** PAS ** sûr, c'est –

+0

Je l'aurais dépanné dans queryConsole pour comprendre le problème avant d'avoir rechargé la base de données. En apprenant une partie de ceci, je suggérerais un petit échantillon de données qui réindexeront presque instantanément. Je désactive également l'indexation automatique et le fais sous mon contrôle et actualise la page d'état de la base de données pour savoir exactement ce qui se passe. –

1

Il me semble que votre configuration est correcte, ce qui me suggère que le problème est le timing. Une fois que vous spécifiez les index souhaités, MarkLogic commence à les créer. Si vous exécutez une requête qui requiert ces index avant la fin de la création de MarkLogic, vous obtenez cette erreur. Selon la quantité de contenu que vous avez, le processus de création peut être très rapide ou prendre des heures.

Pour vérifier l'état, pointez votre navigateur vers l'interface d'administration (http://localhost:8001) et accédez à la page de configuration de votre base de données. Cliquez sur l'onglet Etat et cherchez "Réindexer/Réorganiser l'état" -si MarkLogic est toujours en train de réindexer, il vous le dira ici et vous recevrez des mises à jour sur sa progression. (Vous pouvez également obtenir cette information par le biais de the Management API.)

+0

La base de données est très très petite pour tester les idées de sorte que le réindex prend effectivement pas de temps. Je suis certain que c'est une sorte de problème avec les classements que j'utilise - car je ne les utilise pas correctement. –