2017-06-07 3 views
1

J'ai dupliqué la base de données Movie de Neo4j sur Elasticsearch et elle est indexée avec l'index nodes. Il a deux types et Person. Je suis en train de faire un Result Filtering simple avec Graph-Aided Search en utilisant cette ligne de commande curl:Exemple de filtrage des résultats de recherche assistée par graphe

curl -X GET localhost:9200/nodes/_search?pretty -d '{ 
    "query": { 
     "match_all" : {} 
    }, 

    "gas-filter": { 
     "name": "SearchResultCypherfilter", 
     "query": "MATCH (p:Person)-[ACTED_IN]->(m:Movie) WHERE p.name= 'Parker Posey' RETURN m.uuid as id", 
     "ShouldExclude": true, 
     "protocol": "bolt" 
    } 
}' 

Mais je reçois comme résultats tous les 171 noeuds des deux types Movie et Person dans mon index nodes. Cependant, comme ma requête dit que je veux retourner seulement le type Movie par son titre. Donc, fondamentalement, il ne regarde pas à la partie gas-filter.

Aussi quand je mets false comme valeur de shouldExclude je reçois les mêmes résultats.

[UPDATE]

J'ai essayé la suggestion de @Tezra, je retourne maintenant que l'id uuid et je mets shouldExclude au lieu de exclude mais toujours obtenir les mêmes résultats.

Je travaille avec:

  • ElasticSearch 2.3.2
  • graphique assistée par-recherche-2.3.2.0
  • Neo4j communauté 2.3.2.10
  • graphaware-uuid-2.3.2.37 .7
  • graphaware-server-communauté tout 2.3.2.37
  • graphaware-Neo4j à ElasticSearch-2.3.2.37.1

Résultat qui devrait être de retour:

Le uuid du film intitulé You've Got Mail.


J'ai essayé de suivre cette tutorial pour la configuration, et je trouve que index.gas.enable avait la valeur false donc je l'ai changé et terminé la configuration comme dans le tutoriel:

mac$ curl -XPUT http://localhost:9200/nodes/_settings?index.gas.neo4j.hostname=http://localhost:7474 
{"acknowledged":true} 

mac$ curl -XPUT http://localhost:9200/nodes/_settings?index.gas.enable=true 
{"acknowledged":true} 

mac$ curl -XPUT http://localhost:9200/indexname/_settings?index.gas.neo4j.user=neo4j 
{"acknowledged":true} 

mac$ curl -XPUT http://localhost:9200/indexname/_settings?index.gas.neo4j.password=mypassword 
{"acknowledged":true} 

Après cela J'ai essayé d'ajouter les paramètres de boltHostname et bolt.secure mais cela n'a pas fonctionné et j'ai eu cette erreur:

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Can't update non dynamic settings[[index.gas.neo4j.boltHostname]] for open indices [[nodes]]"}],"type":"illegal_argument_exception","reason":"Can't update non dynamic settings[[index.gas.neo4j.boltHostname]] for open indices [[nodes]]"},"status":400} 

Je fermais mon index pour le configurer puis rouvrit:

mac$ curl -XPOST http://localhost:9200/nodes/_close 
{"acknowledged":true} 

mac$ curl -XPUT http://localhost:9200/nodes/_settings?index.gas.neo4j.boltHostname=bolt://localhost:7687 
{"acknowledged":true} 

mac$ curl -XPUT http://localhost:9200/nodes/_settings?index.gas.neo4j.bolt.secure=false 
{"acknowledged":true} 

mac$ curl -XPOST http://localhost:9200/nodes/_open 
{"acknowledged":true} 

Après avoir terminé la configuration que j'ai essayé à nouveau sur Postman la même gas-filter requête que j'exécutais avec curl et maintenant je reçois cette erreur:

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "runtime_exception", 
     "reason": "Failed to parse a search response." 
     } 
    ], 
    "type": "runtime_exception", 
    "reason": "Failed to parse a search response.", 
    "caused_by": { 
     "type": "client_handler_exception", 
     "reason": "java.net.ConnectException: Connection refused (Connection refused)", 
     "caused_by": { 
     "type": "connect_exception", 
     "reason": "Connection refused (Connection refused)" 
     } 
    } 
    }, 
    "status": 500 
} 

Je ne sais pas de quelle connexion parle l'erreur. Je suis sûr que j'ai passé le mot de passe correct de Neo4j dans la configuration. J'ai même arrêté et redémarré à nouveau les serveurs de Elasticsearch et Neo4j mais toujours les mêmes erreurs.

Les paramètres de mon index nodes ressemble à ceci:

{ 
    "nodes" : { 
    "settings" : { 
     "index" : { 
     "gas" : { 
      "enable" : "true", 
      "neo4j" : { 
      "hostname" : "http://localhost:7474", 
      "password" : "neo4j.", 
      "bolt" : { 
       "secure" : "false" 
      }, 
      "boltHostname" : "bolt://localhost:7687", 
      "user" : "neo4j" 
      } 
     }, 
     "creation_date" : "1495531307760", 
     "number_of_shards" : "5", 
     "number_of_replicas" : "1", 
     "uuid" : "SdrmQKhXQmyGKHmOh_xhhA", 
     "version" : { 
      "created" : "2030299" 
     } 
     } 
    } 
    } 
} 

Toutes les idées?

+0

Ne devrait-il pas être "shouldExclude" au lieu de "exclude"? Aussi, je pense que vous devez retourner seulement m.id. – Tezra

+0

@Tezra même avec 'shouldExclude' au lieu de' exclude', j'obtiens les mêmes résultats. Et pourquoi devrais-je retourner seulement m.id? – Benz

Répondre

0

J'ai compris que l'exception Connection refused que j'obtenais était à cause du Wifi. J'ai donc dû me déconnecter d'Internet pour le faire fonctionner. Je sais que ce n'est pas la solution parfaite. Donc, si quelqu'un trouve une meilleure façon de le faire, s'il vous plaît partagez-le ici.