Hi,
I want to find nodes by creating a full text index using the keyword analyzer. I encounter some weird behavior here.
Here is a sample:
I am creating the index:
call db.index.fulltext.createNodeIndex('myTestIndex',['Node'],['name'],{analyzer:'keyword'})
I add a node:
create (n:Node {name:'SN180-1_2009-07.png'})
I try to find it, using only a part of the name:
call db.index.fulltext.queryNodes('myTestIndex', 'name:(*180-1_2009-07*)') yield node as x
return x
.... and get the node as expected!
I try to find it including the characters at the beginning:
call db.index.fulltext.queryNodes('myTestIndex', 'name:(*SN180-1_2009-07*)') yield node as x
return x
.... and get nothing!
Can anyone explain this behavior? Is it as expected?
Thanks for your help
Frank
See org.apache.lucene.queryparser.classic (Lucene 8.2.0 API) - you cannot use wildcards like *
as first character in a search term.
Hi Stefan,
The Changelog for Neo 3.5.6 says:
Full-text schema index queries can now start with a leading "*"
wildcard, such that, for instance, the token "abcdef" in a property value, can be matched by the query "*def"
...and this seems to be correct, as I get a result when searching like...
call db.index.fulltext.queryNodes('myTestIndex', 'name:(*1_2009-07*)') yield node as x
return x
...but not when searching like...
call db.index.fulltext.queryNodes('myTestIndex', 'name:(1_2009-07*)') yield node as x
return x
...which is as expected.
So the behavior as described in the beginning of this thread is still weird, or more likely a bug....
You're right, we're using reverse indexes as well which allows for a "*" at the beginning.
I've just tried with Neo4j 4.0.0. There the 2nd query works as well. Therefore I suspect that bug was already fixed. Maybe as well in latest 3.5.x releases, but don't know for sure.
F.Y.I:
We are using 3.5.12 and I just upgraded to 3.5.14, but it is definitely not working in these versions.
So it seems it is fixed in 4.0.0 only.