- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Neo4J 的新手,我正在尝试为基于时空的高可用性查询构建概念证明。
我有一个设置,其中包含 2 个独立的 Neo4J Enterprise 服务器和一个使用嵌入式 HA Neo4J 服务器运行的 Java 应用程序。
一切都易于设置,基本查询也易于设置且高效。另外执行从 Neo4J 派生的查询 SpatialRepository按预期工作。
我很难理解的是如何使用 SDN 结合任何其他 where 子句进行空间查询。作为一个简单的例子,我如何编写查找名为 X 的用户在纬度/经度 Y 英里范围内的所有位置。因为 SpatialRepository 不是常规 Spring Repository 类树的一部分,所以我不相信我可以使用任何命名约定,我的意图是执行空间查询然后过滤结果吗?
我已经追踪到 LegacyIndexSearcher(它的名字让我感到害怕!)的代码,但看不到任何扩展搜索的机制。我也看过 IndexProviderTest在 GitHub 上,它可以提供一种手动机制来对索引执行查询,但我认为可能有两个索引在起作用。
如果我了解如何构建可以在 @Query 注释中使用的 Cypher 查询,这可能会有所帮助。虽然我已经能够使用控制台执行简单的 REST 查询:
:POST /db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance { "layer":"location", "pointX":0.0, "pointY":51.526256, "distanceInKm":100 }
这不起作用:
start n=node:location('withinDistance:[51.526256,0.0,100.0]') return n;
错误是:
Index `location` does not exist Neo.ClientError.Schema.NoSuchIndex
索引是(可能天真地)使用 Spring 创建的:
@Indexed(indexType = IndexType.POINT, indexName = "location") String wkt;
如果我运行 index --indexes
在控制台中,我可以看到没有名为 location 的索引,但是有一个名为 location__neo4j-spatial__LayerNodeIndex__internal__spatialNodeLookup__
的索引。 .
我需要手动创建索引吗?如果是这样,有人可以指出文档的方向,我会继续进行。
假设只是无知让我无法运行简单的 Cypher 查询,那么它是否就像向查询添加常规 Cypher WHERE 子句以执行基于空间和属性的查询的组合一样简单?
添加了更多索引详细信息
运行了:GET /db/data/index/node/
从控制台我可以看到两个可能有用的索引(其他索引已删除):
{ "location__neo4j-spatial__LayerNodeIndex__internal__spatialNodeLookup__": { "template": "/db/data/index/node/location__neo4j-spatial__LayerNodeIndex__internal__spatialNodeLookup__/{key}/{value}", "provider": "lucene", "type": "exact" }, "GeoTemporalThing": { "template": "/db/data/index/node/GeoTemporalThing/{key}/{value}", "provider": "lucene", "type": "exact" }}
所以也许这应该是我正在尝试的查询的正确格式:
start n=node:GeoTemporalThing('withinDistance:[51.526256,0.0,100.0]') return n;
但这给了我这个错误(我现在正在谷歌搜索)
org.apache.lucene.queryParser.ParseException: Cannot parse 'withinDistance:[51.526256,0.0,100.0]': Encountered " "]" "] "" at line 1, column 35.Was expecting one of: "TO" ... ... ...
更新
确定我的索引不存在并且我应该使用 REST 接口(interface)创建一个索引,该索引的名称是我希望 SDN 创建的,如下所示:
:POST /db/data/index/node{ "name" : "location", "config" : { "provider" : "spatial", "geometry_type" : "point", "wkt" : "wkt" }}
而且,现在一切似乎都运行良好。所以,我的问题是,我是否必须手动创建该索引?如果我查看 org.springframework.data.neo4j.support.index.IndexType 中的代码,它看起来好像应该使用我上面使用的设置,但它只创建了长命名的 Lucene 索引:
public enum IndexType{ @Deprecated SIMPLE { public Map getConfig() { return LuceneIndexImplementation.EXACT_CONFIG; } }, LABEL { public Map getConfig() { return null; } public boolean isLabelBased() { return true; }}, FULLTEXT { public Map getConfig() { return LuceneIndexImplementation.FULLTEXT_CONFIG; } }, POINT { public Map getConfig() { return MapUtil.stringMap( IndexManager.PROVIDER, "spatial", "geometry_type" , "point","wkt","wkt") ; } } ; public abstract MapgetConfig(); public boolean isLabelBased() { return false; }}
我确实清理了系统并且行为是一样的,我是否遗漏了一个步骤?
软件详情:
java :
neo4j 2.0.1
neo4j-ha 2.0.1
neo4j-空间 0.12-neo4j-2.0.1
spring-data-neo4j 3.0.0.RELEASE
独立服务器:
neo4j-enterprise-2.0.1
neo4j-spatial-0.12-neo4j-2.0.1-server-plugin
最佳答案
我不确定这是否是 Spring Data 在设置索引时的错误,但使用 REST 索引手动创建索引是可行的:
:POST /db/data/index/node{ "name" : "location", "config" : { "provider" : "spatial", "geometry_type" : "point", "wkt" : "wkt" }}
我现在可以在 @Query 注释中使用 cypher 以最小的努力执行查询(显然会有更多参数):
@Query(value = "start n=node:location('withinDistance:[51.526256,0.0,100.0]') MATCH user-[wa:WAS_HERE]-n WHERE wa.ts > {ts} return user"Page findByTimeAtLocation(@Param("ts") long ts);
关于Neo4J、SDN 和运行 Cypher 空间查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200571/
在C语言中,当有变量(假设都是int)i小于j时,我们可以用等式 i^=j^=i^=j 交换两个变量的值。例如,令int i = 3,j = 5;在计算 i^=j^=i^=j 之后,我有 i = 5,
我为以下问题编写了以下代码: 给定一个由 N 个正整数组成的序列 A,编写一个程序来查找满足 i > A[j]A[i](A[i] 的 A[j] 次方 > A[j] 的 A[i] 次方)。 我的代码通过
这个表达式是从左到右解析的吗?我试图解释解析的结果,但最后的结果是错误的。 int j=10, k=10; j+=j-=j*=j; //j=j+(j-=j*=j)=j+(j-j*j) k+=k*=
给定一个整数数组 A ,我试图找出在给定位置 j ,A[j] 从每个 i=0 到 i=j 在 A 中出现了多少次。我设计了一个如下所示的解决方案 map CF[400005]; for(int i=0
你能帮我算法吗: 给定 2 个相同大小的数组 a[]和 b[]具有大于或等于 1 的整数。 查找不相等的索引 i和 j ( i != j ) 使得值 -max(a[i]*b[i] + a[i] * b
每次用J的M.副词,性能显着下降。因为我怀疑艾弗森和许比我聪明得多,我一定是做错了什么。 考虑 Collatz conjecture .这里似乎有各种各样的内存机会,但不管我放在哪里M. ,性能太差了
假设一个包含各种类型的盒装矩阵: matrix =: ('abc';'defgh';23),:('foo';'bar';45) matrix +---+-----+--+|abc|defgh|23|+
是否有可能对于两个正整数 i 和 j,(-i)/j 不等于 -(i/j)?我不知道这是否可能......我认为这将是关于位的东西,或者 char 类型的溢出或其他东西,但我找不到它。有什么想法吗? 最
假设两个不同大小的数组: N0 =: i. 50 N1 =: i. 500 应该有一种方法可以获得唯一的对,只需将两者结合起来即可。我发现的“最简单”是: ]$R =: |:,"2 |: (,.N0)
我是 J 的新用户,我只是想知道 J 包中是否实现了三次样条插值方法? 最佳答案 我自己不熟悉,但是我确实安装了所有的包,所以 $ rg -l -i spline /usr/share/j/9.02
在 Q/kdb 中,您可以使用 ': 轻松修改动词,它代表每个优先级。它会将动词应用于一个元素及其之前的邻居。例如 =': 检查值对是否相等。在 J 中,您可以轻松折叠 /\ 但它是累积的,是否有成对
嗨,我有一个 4x4 双矩阵 A 1+2i 2-1i -3-2i -1+4i 3-1i -3+2i 1-3i -1-3i 4+3i 3+5i 1-2i -1-4i
刚刚发现 J 语言,我输入: 1+^o.*0j1 I expected the answer to be 0 ,但我得到了 0j1.22465e_16。虽然这非常接近于 0,但我想知道为什么 J 应该
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 3 年前。 我正在阅读“C++ 编程语言”
当第一行是 1, 1/2 , 1/3 ....这是支持该问题的图像。 是否存在比朴素的 O(n^2) 方法更有效的方法? 我在研究伯努利数时遇到了这个问题,然后在研究“Akiyama-Tanigawa
我写了一段Java代码,它在无限循环中运行。 下面是代码: public class TestProgram { public static void main(String[] args){
for (int i = n; i > 0; i /= 2) { for (int j = 0; j 0; i /= 2) 的第一个循环结果 O(log N) . 第二个循环for (int
如问题中所述,需要找到数组中 (i,j) 对的总数,使得 (1) **ia[j]** 其中 i 和 j 是数组的索引。没有空间限制。 我的问题是 1) Is there any approach w
for l in range(1,len(S)-1): for i in range(1,len(S)-l): j=i+l for X in N:
第二个for循环的复杂度是多少?会是n-i吗?根据我的理解,第一个 for 循环将执行 n 次,但第二个 for 循环中的索引设置为 i。 //where n is the number elemen
我是一名优秀的程序员,十分优秀!