我有一个合理数目的节点(大约60,000)
(:Document {title:"A title"})给定一个标题,如果存在匹配节点,我希望找到它。问题是我得到的头衔不一致。也就是说,有时一个新词的开头是“资本”,有时是小写。有时关键字与Kebab大小写结合在一起,有时它们通常被写成关键词.
为了弥补这一点,我使用了apoc和Levenshtein在给定标题和每个节点之间的距离,并且只有在节点低于某个阈值时才接受它为匹配:
MATCH (a:Document)
WHERE apoc.text.distance(a.title, "A title") < 10
RETURN a这不是很好的规模。目前,单次查找大约需要700 ms,这太慢了,因为这可能会增加到大约15万个节点。
我考虑在节点的alias:[...]属性中存储/缓存替代标题,并在所有别名上构建索引,但我不知道这在Neo4j中是否可行。
给出一个大型节点数据库的“模糊查找”标题的最快方法是什么?
发布于 2018-11-05 08:54:31
在Neo4j 3.5 (目前在beta03上)中,有FTS (全文搜索)功能。
编辑:我在Neo4j:https://graphaware.com/neo4j/2019/01/11/neo4j-full-text-search-deep-dive.html上写了一篇关于FTS的详细博客文章
然后可以使用Lucene经典查询分析器语法查询文档。
创建索引:
CALL db.index.fulltext.createNodeIndex('documents', ['Document'], ['title','text'])导入一些文档:
LOAD CSV WITH HEADERS FROM "file:///docs.csv" AS row
CREATE (n:Document) SET n = row标题包含“大收费”的查询文档
CALL db.index.fulltext.queryNodes('documents', 'title: "heavy toll"')
YIELD node, score
RETURN node.title, score
╒══════════════════════════════════════════════════════════════════════╤══════════════════╕
│"node.title" │"score" │
╞══════════════════════════════════════════════════════════════════════╪══════════════════╡
│"Among Deaths in 2016, a Heavy Toll in Pop Music - The New York Times"│3.7325966358184814│
└──────────────────────────────────────────────────────────────────────┴──────────────────┘查询带有错误:的相同标题
CALL db.index.fulltext.queryNodes('documents', 'title: \\"heavy~ tall~\\"')
YIELD node, score
RETURN node.title, score注意转义引号=> \“,传递给底层解析器的字符串应该包含引号,以便执行短语查询而不是布尔查询。
此外,术语旁边的tidle表示使用Damarau-Levenshtein algo执行模糊搜索。
╒══════════════════════════════════════════════════════════════════════╤═════════════════════╕
│"node.title" │"score" │
╞══════════════════════════════════════════════════════════════════════╪═════════════════════╡
│"Among Deaths in 2016, a Heavy Toll in Pop Music - The New York Times"│0.868073046207428 │
├──────────────────────────────────────────────────────────────────────┼─────────────────────┤
│"Prisons Run by C.E.O.s? Privatization Under Trump Could Carry a Heavy│0.4014900326728821 │
│ Price - The New York Times" │ │
├──────────────────────────────────────────────────────────────────────┼─────────────────────┤
│"‘All Talk,’ ‘No Action,’ Says Trump in Twitter Attack on Civil Rights│0.28181418776512146 │
│ Icon - The New York Times" │ │
├──────────────────────────────────────────────────────────────────────┼─────────────────────┤
│"Immigrants Head to Washington to Rally While Obama Is Still There - T│0.24634429812431335 │
│he New York Times" │ │
├──────────────────────────────────────────────────────────────────────┼─────────────────────┤https://stackoverflow.com/questions/53149046
复制相似问题