Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确管理neo4j-community-3.1.0 lucene遗留索引?(非常奇怪的问题)_Python_Indexing_Neo4j_Lucene - Fatal编程技术网

Python 如何正确管理neo4j-community-3.1.0 lucene遗留索引?(非常奇怪的问题)

Python 如何正确管理neo4j-community-3.1.0 lucene遗留索引?(非常奇怪的问题),python,indexing,neo4j,lucene,Python,Indexing,Neo4j,Lucene,我对Neo4j的遗留索引有一些奇怪的问题,今天就卡住了。我需要全文支持,因为我希望与Solr(使用Lucene全文)进行性能比较,以查看不同的数据模型如何进行比较 我一直在关注一些在线指南,以及stack上的各种帖子 直到昨天,我都取得了成功,突然我破坏了索引文件,因为范围查询返回的结果无效且不一致。因此,我正试图将我需要采取的步骤一成不变 我使用CSV批量导入工具用标签“record”填充我的数据库,用标签“data:SPD”、“data:DIR”、“data:TS”等填充各个节点(使用2个标

我对Neo4j的遗留索引有一些奇怪的问题,今天就卡住了。我需要全文支持,因为我希望与Solr(使用Lucene全文)进行性能比较,以查看不同的数据模型如何进行比较

我一直在关注一些在线指南,以及stack上的各种帖子

直到昨天,我都取得了成功,突然我破坏了索引文件,因为范围查询返回的结果无效且不一致。因此,我正试图将我需要采取的步骤一成不变

我使用CSV批量导入工具用标签“record”填充我的数据库,用标签“data:SPD”、“data:DIR”、“data:TS”等填充各个节点(使用2个标签,表示它们是海洋数据节点,用于不同类型的测量)

数据模型很简单。我有:

(r:record {meta:M, time:T, lat:L1, lon:L2})-[:measures]-(d:data {value:V})
M
是一个类似ID的字符串,我使用它在内部跟踪数据以进行测试
T
是一个历元时间整数
L1
/
L2
是地理空间坐标浮动。My
data
节点表示各种收集的数据,并非所有记录都具有相同的数据节点。(有些有温度、风速、风向、海水温度等)。这些值都表示为浮点数。每个数据节点都有第二个标签,说明其包含的数据类型

完成导入后,我打开shell并执行以下顺序:

index --create node_auto_index -t Node
index --set-config node_auto_index fulltext
我已将以下配置添加到默认的neo4j.conf文件中(甚至在CSV批量导入之前也有此配置):

在今天之前,我会通过查询shell看到fulltext命令确实有效:

index --get-config node_auto_index
返回类似于:

{
    "provider": "lucene",
    "type": "fulltext"
}
最近,我使用
MATCH
子句对数据进行了一系列测试。我知道这使用了更现代的模式索引。我的结果很好,返回了预期的数据

我在某个地方读到,由于我的数据是在创建旧索引之前导入的,因此我需要通过以下操作手动为相关属性编制索引:

START n=node(*)
WITH n SKIP {curr_skip} LIMIT {fixed_lim}
WHERE EXISTS(n.meta)
SET n.time=n.time, n.lat=n.lat, n.lon=n.lon, n.meta=n.meta
RETURN n
由于我有400万条记录,我的python处理程序通过一系列批处理操作来实现这一点,每次通过
{fixed_lim}
增加
{curr\u skip}
,并执行查询,直到得到0个结果

在昨天转换到涉及
START
子句的测试时,我发现使用lucene查询时,如下所示:

START r=node:node_auto_index(lon:[{} TO {}]) RETURN count(r)
START r=node:node_auto_index(time:[{} TO {}] AND lat:[{} TO {}]) RETURN count(r)
(填写了范围)给了我糟糕的结果。我期望返回的数据没有返回。此外,不同的范围产生了奇怪的结果,例如。范围(a,b)可能会产生1000个结果,但是(a-e,b+e),前一个范围的超集将产生0个结果!!然而,关于
时间
纬度
的完全相同的查询方式似乎工作得很好!更重要的是,我可以进行多因素查询,如:

START r=node:node_auto_index(lon:[{} TO {}]) RETURN count(r)
START r=node:node_auto_index(time:[{} TO {}] AND lat:[{} TO {}]) RETURN count(r)
我最好的猜测是,不知何故我破坏了
lon
的索引文件

我在网上找到的建议是停止数据库,转到
/path/to/graph.db
,删除所有
索引*
,然后重新启动数据库。按照今天的指示,我发现了更多奇怪的行为。我从上面重复了相同的索引创建/配置语句,但在查询配置后,发现索引类型仍然是
“类型”:“精确的”
。更奇怪的是,索引文件实际上并没有被创建!在
path/to/graph.db
下没有创建
index
目录

我确信我已通过以下方式正确启动外壳:

neo4j-shell -path /path/to/graph.db/
如果我尝试使用
index--create node\u auto\u index-t node
,我会得到一个
已经存在的通知,但它显然不存在


现在,我想我要重新从头开始,看看是否可以重现这些错误,或者以某种方式绕过它们

否则,如果在这里有经验的任何人对可能出现的问题有任何想法,我将非常感谢您的意见


更新:

所以我继续从零开始

# ran my bulk import code
python3
>>> from mylib.module import load_data()
>>> load_data()
>>> # ... lots of printed stuff ...
IMPORT DONE in 3m 37s 950ms.
Imported:
  15394183 nodes
  15394171 relationships
  27651625 properties
Peak memory usage: 361.94 MB
>>> exit()

# switched out my new database
cd /path/to/neo4j-community-3.1.0
mv data/databases/graph.db data/databases/oldgraph.db
mv data/databases/newgraph.db data/databases/graph.db

# check neo4j is off
ps aux | grep neo

# neo4j shell commands
bin/neo4j-shell -path data/databases/graph.db/
... some warning about GraphAware Runtime disbaled.
... the welcome message

neo4j-sh (?)$ index --create node_auto_index -t Node
neo4j-sh (?)$ index --set-config node_auto_index fulltext
INDEX CONFIGURATION CHANGED, INDEX DATA MAY BE INVALID
neo4j-sh (?)$ index --get-config node_auto_index -t Node
{
    "provider": "lucene",
    "type": "exact"
}
neo4j-sh (?)$ exit # thought maybe I just had to restart

# try again
bin/neo4j-shell -path data/databases/graph.db/
neo4j-sh (?)$ index --get-config node_auto_index -t Node
{
    "provider": "lucene",
    "type": "exact"
}
neo4j-sh (?)$ index --set-config node_auto_index fulltext
INDEX CONFIGURATION CHANGED, INDEX DATA MAY BE INVALID
neo4j-sh (?)$ index --get-config node_auto_index -t Node
{
    "provider": "lucene",
    "type": "exact"
}
# hmmmmm
neo4j-sh (?)$ index --create node_auto_index -t Node
Class index 'node_auto_index' alredy exists
# sanity check
neo4j-sh (?)$ MATCH (r:record) RETURN count(r);
+----------+
| count(r) |
+----------+
| 4085814  |
+----------+
1 row
470 ms
neo4j-sh (?)$ exit
正如您所看到的,即使在重新创建一个新的数据库之后,我现在也无法激活全文索引。我不知道为什么它在几天前工作,而不是现在,因为我是唯一一个在这个服务器上工作的人!也许我甚至需要重新安装neo4j作为一个整体


更新/想法:

好的,关于我的问题,我有一个潜在的想法,我认为这可能与权限有关。我有一个
dashboard.py
模块,我一直用它来协调打开/关闭solr和neo4j。前几天,我遇到了一些奇怪的问题,无法从shell中执行启动/停止序列,所以我弄乱了很多权限

让我们叫我
userA
。我属于
groupA
groupB

我记得昨天运行了以下程序:

sudo chown -R $USER:groupB neo4j-community-3.1.0
我注意到我的python脚本正在生成的所有新数据库文件都属于group
groupA
。这可能是罪魁祸首吗

我又犯了一个奇怪的错误,我无法重新创建索引,因为它认为在我删除它之后它仍然存在。我将再次重新运行批量导入,并在尝试设置全文索引之前修复这些权限。将于今晚更新

编辑:

这似乎没有效果:( 我甚至尝试了
chown
将所有内容都添加到root,包括用户和组,但都无济于事。我的lucene索引不会从精确变为全文

我现在就要开始重新安装所有的东西


更新:

甚至完全重新安装都不起作用

我删除了我的整个neo4j-community-3.1.0文件夹,并打开了我的tarball。 我设置了整个文件夹的所有权
dbms.auto_index.nodes.enabled=true
dbms.auto_index.nodes.keys=meta,lat,lon,time
index --set-config node_auto_index fulltext
index --set-config node_auto_index type fulltext