I have a reasonable number of nodes (roughly 60,000)
(:Document {title:"A title"})
Given a title, I want to find the matching node, if it exists. The problem is that the title I'm given is not consistent. That is, sometimes the beginning of a new word is Capital, sometimes it is all lower case. Sometimes Key-Words are combined with Kebab case, sometimes they are written normally as key words.
To compensate for that I use apoc and the Levenshtein distance between the given title and every node and only accept a node as a match if it is below some threshold:
MATCH (a:Document)
WHERE apoc.text.distance(a.title, "A title") < 10
RETURN a
This does not scale well. Currently a single lookup takes about 700 ms which is too slow, given that this will likely grow to somewhere around 150,000 nodes.
I was thinking of storing / caching the occurrence of alternative titles in an alias:[...] property of the node and build an index over all aliases, but I don't know if this is possible in Neo4j.
What is the fastest way to "fuzzy find" a title given a large database of nodes?