首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模糊文本属性匹配的Neo4j快速方法

模糊文本属性匹配的Neo4j快速方法
EN

Stack Overflow用户
提问于 2018-11-05 05:54:13
回答 1查看 5.1K关注 0票数 7

我有一个合理数目的节点(大约60,000)

代码语言:javascript
运行
复制
(:Document {title:"A title"})

给定一个标题,如果存在匹配节点,我希望找到它。问题是我得到的头衔不一致。也就是说,有时一个新词的开头是“资本”,有时是小写。有时关键字与Kebab大小写结合在一起,有时它们通常被写成关键词.

为了弥补这一点,我使用了apoc和Levenshtein在给定标题和每个节点之间的距离,并且只有在节点低于某个阈值时才接受它为匹配:

代码语言:javascript
运行
复制
MATCH (a:Document)
WHERE apoc.text.distance(a.title, "A title") < 10
RETURN a

这不是很好的规模。目前,单次查找大约需要700 ms,这太慢了,因为这可能会增加到大约15万个节点。

我考虑在节点的alias:[...]属性中存储/缓存替代标题,并在所有别名上构建索引,但我不知道这在Neo4j中是否可行。

给出一个大型节点数据库的“模糊查找”标题的最快方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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经典查询分析器语法查询文档。

创建索引:

代码语言:javascript
运行
复制
CALL db.index.fulltext.createNodeIndex('documents', ['Document'], ['title','text'])

导入一些文档:

代码语言:javascript
运行
复制
LOAD CSV WITH HEADERS FROM "file:///docs.csv" AS row
CREATE (n:Document) SET n = row

标题包含“大收费”的查询文档

代码语言:javascript
运行
复制
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│
└──────────────────────────────────────────────────────────────────────┴──────────────────┘

查询带有错误:的相同标题

代码语言:javascript
运行
复制
CALL db.index.fulltext.queryNodes('documents', 'title: \\"heavy~ tall~\\"')
YIELD node, score
RETURN node.title, score

注意转义引号=> \“,传递给底层解析器的字符串应该包含引号,以便执行短语查询而不是布尔查询。

此外,术语旁边的tidle表示使用Damarau-Levenshtein algo执行模糊搜索。

代码语言:javascript
运行
复制
╒══════════════════════════════════════════════════════════════════════╤═════════════════════╕
│"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"                                                    │                     │
├──────────────────────────────────────────────────────────────────────┼─────────────────────┤
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53149046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档