docs: def search_nodes_by_value(manager, value, prop=None, node_type='Node'):
      """
      Traverses all nodes or nodes of specified label and fuzzy compares the property/properties of the node
      with the supplied string.
  
      :param manager: Neo4jDBSessionManager
      :param value: Value to search for
      :param prop: Which property to look for value in
      :param node_type:
  
      :type value: str
      :type prop: str
      :type node_type: str
      :return: dicts
      """
      if prop:
          q = """
              MATCH (n:{label})
              WHERE n.{prop} =~ "(?i).*{value}.*" OR any(x IN n.{prop} WHERE x =~ "(?i).*{value}.*")
              RETURN distinct n
              """.format(label=node_type, prop=prop, value=value)
      else:
          q = """
              MATCH (n:{label})
              WITH n, keys(n) as props
              WHERE any(prop in props WHERE n[prop] =~ "(?i).*{value}.*") OR
                any(prop in props WHERE any(x IN n[prop] WHERE x =~ "(?i).*{value}.*"))
              RETURN distinct n
              """.format(label=node_type, value=value)
  
      with manager.session as s:
          for result in s.run(q):
              yield result['n']