Python 如何正确管理neo4j-community-3.1.0 lucene遗留索引?(非常奇怪的问题)
我对Neo4j的遗留索引有一些奇怪的问题,今天就卡住了。我需要全文支持,因为我希望与Solr(使用Lucene全文)进行性能比较,以查看不同的数据模型如何进行比较 我一直在关注一些在线指南,以及stack上的各种帖子 直到昨天,我都取得了成功,突然我破坏了索引文件,因为范围查询返回的结果无效且不一致。因此,我正试图将我需要采取的步骤一成不变 我使用CSV批量导入工具用标签“record”填充我的数据库,用标签“data:SPD”、“data:DIR”、“data:TS”等填充各个节点(使用2个标签,表示它们是海洋数据节点,用于不同类型的测量) 数据模型很简单。我有: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个标
(r:record {meta:M, time:T, lat:L1, lon:L2})-[:measures]-(d:data {value:V})
M
是一个类似ID的字符串,我使用它在内部跟踪数据以进行测试T
是一个历元时间整数L1
/L2
是地理空间坐标浮动。Mydata
节点表示各种收集的数据,并非所有记录都具有相同的数据节点。(有些有温度、风速、风向、海水温度等)。这些值都表示为浮点数。每个数据节点都有第二个标签,说明其包含的数据类型
完成导入后,我打开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脚本正在生成的所有新数据库文件都属于groupgroupA
。这可能是罪魁祸首吗
我又犯了一个奇怪的错误,我无法重新创建索引,因为它认为在我删除它之后它仍然存在。我将再次重新运行批量导入,并在尝试设置全文索引之前修复这些权限。将于今晚更新
编辑:
这似乎没有效果:(
我甚至尝试了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