Lucene全文索引:所有索引节点得分相同?

时间:2015-08-20 15:57:52

标签: neo4j lucene full-text-search py2neo neo4jrestclient

我一直在努力解决这个问题。

我想针对全文进行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索引,每个节点属性都有'name': (这里使用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很好地进行了排序,所以我明白它在导入时会自行创建排序;它没有。

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

2 个答案:

答案 0 :(得分:1)

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

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

根据我自己使用lucene和Neo4j的经验,我看到许多实例,其中返回的相关性得分在不同查询中是不同的。

答案 1 :(得分: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

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