Пример фильтрации результатов графического поиска
Я дублировал базу данных фильмов Neo4j
на Elasticsearch
и он индексируется с индексом nodes
, Имеет два типа Movie
а также Person
, Я пытаюсь сделать простой Result Filtering
с Graph-Aided Search
используя эту командную строку curl:
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"
}
}'
Но я получаю в результате все 171 узлов обоих типов Movie
а также Person
в моем указателе nodes
, Однако, как говорится в моем запросе, я хочу вернуть только тип Movie
по названию. Так что в основном это не выглядит gas-filter
часть.
Также, когда я ставлю false
как значение shouldExclude
Я получаю те же результаты.
[ОБНОВИТЬ]
Я попробовал предложение @Tezra, теперь я возвращаю только идентификатор uuid
и я положил shouldExclude
вместо exclude
но все равно получаю те же результаты.
Я работаю с:
- Elasticsearch 2.3.2
- граф-автоматизированный поиск-2.3.2.0
- Neo4j-сообщество 2.3.2.10
- graphaware-UUID-2.3.2.37.7
- graphaware-сервер-сообщества все-2.3.2.37
- graphaware-Neo4j к elasticsearch-2.3.2.37.1
Результат, который должен быть возвращен:
uuid
фильма под названием You've Got Mail
,
Я попытался следовать этому руководству по настройке, и я обнаружил, что index.gas.enable
имел значение false
поэтому я изменил его и закончил настройку, как в учебнике:
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}
После этого я попытался добавить настройки boltHostname
а также bolt.secure
но это не сработало, и у меня была эта ошибка:
{"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}
Поэтому я закрыл свой индекс, чтобы настроить его, а затем открыл его снова:
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}
После завершения настройки я попробовал еще раз Postman
тот же самый gas-filter
запрос, который я выполнял с curl
и теперь я получаю эту ошибку:
{
"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
}
Я не знаю, о какой связи говорит ошибка. Я уверен, что передал правильный пароль Neo4j
в конфигурации. Я даже остановил и снова перезапустил серверы Elasticsearch
а также Neo4j
но все те же ошибки.
Настройки моего индекса nodes
выглядит так:
{
"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"
}
}
}
}
}
Есть идеи?
1 ответ
Я понял, что Connection refused
Исключение, которое я получал, было из-за Wifi
, Поэтому мне пришлось отключиться от интернета, чтобы все заработало. Я знаю, что это не идеальное решение. Так что, если кто-то нашел лучший способ сделать это, пожалуйста, поделитесь им здесь.