def get(
        self, properties: Dict = None, ids: List[str] = None, exact_match: bool = True
    ) -> List[LabelledNode]:
        """
        Get the nodes from the graph.

        Args:
            properties (Dict | None, optional): The properties to retrieve. Defaults to None.
            ids (List[str] | None, optional): A list of ids to find in the graph. Defaults to None.
            exact_match (bool, optional): Whether to do exact match on properties. Defaults to True.

        Returns:
            List[LabelledNode]: A list of nodes returned

        """
        cypher_statement = "MATCH (e) "

        params = {}
        if properties or ids:
            cypher_statement += "WHERE "

        if ids:
            if exact_match:
                cypher_statement += "e.id IN $ids "
            else:
                cypher_statement += "WHERE size([x IN $ids where toLower(e.id) CONTAINS toLower(x)]) > 0 "
            params["ids"] = ids

        if properties:
            prop_list = []
            for i, prop in enumerate(properties):
                prop_list.append(f"e.`{prop}` = $property_{i}")
                params[f"property_{i}"] = properties[prop]
            cypher_statement += " AND ".join(prop_list)

        return_statement = (
            """
        WITH e
        RETURN e.id AS name,
               [l in labels(e) WHERE l <> '"""
            + BASE_ENTITY_LABEL
            + """' | l][0] AS type,
               e{.* , embedding: Null, id: Null} AS properties
        """
        )
        cypher_statement += return_statement
        response = self.structured_query(cypher_statement, param_map=params)
        response = response if response else []

        nodes = []
        for record in response:
            # text indicates a chunk node
            # none on the type indicates an implicit node, likely a chunk node
            if "text" in record["properties"] or record["type"] is None:
                text = record["properties"].pop("text", "")
                nodes.append(
                    ChunkNode(
                        id_=record["name"],
                        text=text,
                        properties=remove_empty_values(record["properties"]),
                    )
                )
            else:
                nodes.append(
                    EntityNode(
                        name=record["name"],
                        label=record["type"],
                        properties=remove_empty_values(record["properties"]),
                    )
                )

        return nodes

        Get the nodes from the graph.

        Args:
            properties (Dict | None, optional): The properties to retrieve. Defaults to None.
            ids (List[str] | None, optional): A list of ids to find in the graph. Defaults to None.
            exact_match (bool, optional): Whether to do exact match on properties. Defaults to True.

        Returns:
            List[LabelledNode]: A list of nodes returned

        
llama-index-integrations/graph_stores/llama-index-graph-stores-neptune/llama_index/graph_stores/neptune/base_property_graph.py