Lucene全文索引:所有具有相同分数的索引节点?

Lucene full-text index: all indexed nodes with same score?

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

我想对全文进行 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 查询才能看到它,因为如果您使用网络控制台,您将看不到所有数据!!)

我的代码重新创建全文 lucene 索引,每个节点 属性 'name': (这里使用 neo4j-rest-client,但我也会像 Google 讨论中那样尝试使用 py2neo):

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 自己做排序非常好,所以我知道它在导入时自己创建了一个排名;它没有。

我做错了什么或遗漏了什么?

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

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

根据我自己使用 lucene 和 Neo4j 的经验,我看到很多情况下,不同查询返回的相关性分数不同。

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

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

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

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