0

几天以来,我一直在尝试解决这个问题。

我想START对全文进行查询,按相关性排序,以便对结果进行分页。

很高兴,我终于在全文索引和 neo(并使用python作为驱动程序)上找到了这个线程。

[ https://groups.google.com/forum/#!topic/neo4j/9G8fcjVuuLw]

我已经使用批量超级导入器导入了我的数据库,并得到了@Michaelhunger 的回复,他注意到有一个错误,所有分数都将被导入相同的值。

所以,现在我正在重新创建索引,并通过 REST (&order=score)检查分数

http://localhost:7474/db/data/index/node/myInde?query=name:myKeyWord&order=score

并注意到条目仍然具有相同的分数

您必须执行 ajax 查询才能看到它,因为如果您使用 Web 控制台,您将看不到所有数据!!

我的代码用于重新创建全文 lucene 索引,每个节点属性为“名称”:(此处使用 neo4j-rest-client,但我也会尝试使用 py2neo,如 Google 讨论中的那样):

from neo4jrestclient.client import GraphDatabase
gdb = GraphDatabase("http://localhost:7474/db/data/")

myIndex =  gdb.nodes.indexes.create("myIndex", type="fulltext", provider="lucene")

myIndex.add("name",node.get("name"),node)

结果:

http://localhost:7474/db/data/index/node/myInde?query=name:DNA&order=score

data Object {id: 17062920, name: "DNA damage theory of aging"}
VM995:10 **score 11.097855567932129**
...
data Object {id: 17022698, name: "DNA (film)"}
VM995:10 **score 11.097855567932129**

在文档中: [ http://neo4j.com/docs/stable/indexing-lucene-extras.html#indexing-lucene-sort] 写到 Lucene 本身可以很好地进行排序,所以我理解它创建了一个排名单独进口;它不是。

我做错了什么或错过了什么?

4

2 回答 2

1

我相信您看到的问题与您正在索引的文本、查询词的组合有关,正如 Michael Hunger 指出的 Neo4j 中当前具有 OMITNORMS=true 的 lucene 配置。使用此设置,lucene 查询,如您发布的示例中一样,其中有不同大小的文本,但查询词在每个文档中出现一次通常会导致相同的 lucene 相关性分数。原因是当 OMITNORMS 为真时,不考虑被索引文档的大小/长度(字段长度规范化)。

查看您的示例,尚不清楚您的预期结果是什么。例如,您是否希望文本较短的文档首先出现?

在我自己使用 lucene 和 Neo4j 的经验中,我见过许多实例,其中返回的相关性分数在不同的查询中是不同的。

于 2015-08-23T17:26:53.190 回答
0

我的问题的目标是获取按与查询关键字匹配的节点名称的相关性排序的结果列表。

@mfkilgore 指出了这个解决方法:

start n=node:topic('name:(keyword1* AND keyword2*)') MATCH (n)  with n order by length(split(n.name," ")) asc limit 20 return n

此解决方法计算节点名称中的字符,然后按字符串长度排序。

于 2015-10-05T14:58:04.717 回答