One solution is to give a Node a second Label. (Yes, you put zero, one, or more Labels on a node!)
For all "good" videos, you can add a second Label:
So, to set a video's label that is good like this:
MATCH (n:Videos)
WHERE // some condition
CALL apoc.create.addLabels( v, ["GoodVideo" ] ) // Add GoodVideo label
YIELD node
Then node will have two labels: Videos
and GoodVideo
Then you can create index restricted to just GoodVideo
CALL db.index.fulltext.createNodeIndex(
"videoIndex", // name of index
["GoodVideo"], // List of Labels for Nodes to be indexed
// List of Properties to be indexed
["title", "description", "author", "tags", "mpd", "thumbnailUrl", "views", "publishDate"])
You can then match for either Video
or GoodVideo
(or both.). It might make sense to make Video and GoodVideo mutually exclusive or keep Video label for GoodVideo nodes. That's a design choice which depends on how you think you'll want to access your videos. (You can always change your mind later.)
E.g.
MATCH(v:Video)
MATCH(v:GoodVideo)
MATCH(v:Video:GoodVideo) // Video AND GoodVideo
MATCH(v:Video|GoodVideo) // Video OR GoodVideo
(I'm not sure why you used backslashes...). I would reconsider adding publishDate
to the index.
Note: there are lots of options for index creation. See: Indexes for full-text search - Neo4j Cypher Manual