Add tests for regex search and aggregations
This commit is contained in:
parent
12af33ac0a
commit
57ec774c86
@ -50,7 +50,10 @@ def memgraph_with_text_indexed_data(**kwargs) -> Memgraph:
|
|||||||
memgraph = Memgraph()
|
memgraph = Memgraph()
|
||||||
|
|
||||||
memgraph.execute(
|
memgraph.execute(
|
||||||
"""CREATE (:Document {title: "Rules2023", version: 1, fulltext: "Rules2024", date: date("2023-11-14")});"""
|
"""CREATE (:Document {title: "Rules2024", version: 1, fulltext: "random works", date: date("2023-11-14")});"""
|
||||||
|
)
|
||||||
|
memgraph.execute(
|
||||||
|
"""CREATE (:Document {title: "Rules2023", version: 9, fulltext: "text Rules2024", date: date("2023-11-14")});"""
|
||||||
)
|
)
|
||||||
memgraph.execute(
|
memgraph.execute(
|
||||||
"""CREATE (:Document:Revision {title: "Rules2024", version: 2, fulltext: "random words", date: date("2023-12-15")});"""
|
"""CREATE (:Document:Revision {title: "Rules2024", version: 2, fulltext: "random words", date: date("2023-12-15")});"""
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
# by the Apache License, Version 2.0, included in the file
|
# by the Apache License, Version 2.0, included in the file
|
||||||
# licenses/APL.txt.
|
# licenses/APL.txt.
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import gqlalchemy
|
import gqlalchemy
|
||||||
@ -60,31 +62,48 @@ def test_text_search_given_property(memgraph_with_text_indexed_data):
|
|||||||
|
|
||||||
|
|
||||||
def test_text_search_all_properties(memgraph_with_text_indexed_data):
|
def test_text_search_all_properties(memgraph_with_text_indexed_data):
|
||||||
result = list(
|
SEARCH_QUERY = "Rules2024"
|
||||||
memgraph_with_text_indexed_data.execute_and_fetch(
|
|
||||||
"""CALL text_search.search_all("complianceDocuments", "Rules2024") YIELD node
|
ALL_PROPERTIES_QUERY = f"""CALL text_search.search_all("complianceDocuments", "{SEARCH_QUERY}") YIELD node
|
||||||
RETURN node
|
RETURN node
|
||||||
ORDER BY node.version ASC, node.title ASC;"""
|
ORDER BY node.version ASC, node.title ASC;"""
|
||||||
)
|
|
||||||
|
result = list(memgraph_with_text_indexed_data.execute_and_fetch(ALL_PROPERTIES_QUERY))
|
||||||
|
result_nodes = [record["node"] for record in result]
|
||||||
|
|
||||||
|
assert len(result) == 3 and (
|
||||||
|
result_nodes[0].title == SEARCH_QUERY
|
||||||
|
and result_nodes[1].title == SEARCH_QUERY
|
||||||
|
and SEARCH_QUERY in result_nodes[2].fulltext
|
||||||
)
|
)
|
||||||
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
assert True
|
def test_regex_text_search(memgraph_with_text_indexed_data):
|
||||||
|
REGEX_QUERY = """CALL text_search.regex_search("complianceDocuments", "wor.*s") YIELD node
|
||||||
|
|
||||||
def test_text_search_regex(memgraph_with_text_indexed_data):
|
|
||||||
result = list(
|
|
||||||
memgraph_with_text_indexed_data.execute_and_fetch(
|
|
||||||
"""CALL text_search.regex_search("complianceDocuments", "Rules*") YIELD node
|
|
||||||
RETURN node
|
RETURN node
|
||||||
ORDER BY node.version ASC, node.title ASC;"""
|
ORDER BY node.version ASC, node.title ASC;"""
|
||||||
)
|
|
||||||
|
result = list(memgraph_with_text_indexed_data.execute_and_fetch(REGEX_QUERY))
|
||||||
|
|
||||||
|
assert (
|
||||||
|
len(result) == 2
|
||||||
|
and re.search("wor.*s", result[0]["node"].fulltext)
|
||||||
|
and re.search("wor.*s", result[1]["node"].fulltext)
|
||||||
|
# In this test, all values matching the regex string are found in the .node property only ^
|
||||||
)
|
)
|
||||||
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
assert True
|
def test_text_search_aggregate(memgraph_with_text_indexed_data):
|
||||||
|
input_aggregation = json.dumps({"count": {"value_count": {"field": "metadata.gid"}}}, separators=(",", ":"))
|
||||||
|
expected_aggregation = json.dumps({"count": {"value": 2.0}}, separators=(",", ":"))
|
||||||
|
|
||||||
|
AGGREGATION_QUERY = f"""CALL text_search.aggregate("complianceDocuments", "data.title:Rules2024", '{input_aggregation}')
|
||||||
|
YIELD aggregation
|
||||||
|
RETURN aggregation;"""
|
||||||
|
|
||||||
|
result = list(memgraph_with_text_indexed_data.execute_and_fetch(AGGREGATION_QUERY))
|
||||||
|
|
||||||
|
assert len(result) == 1 and result[0]["aggregation"] == expected_aggregation
|
||||||
|
|
||||||
|
|
||||||
def test_text_search_query_boolean(memgraph_with_text_indexed_data):
|
def test_text_search_query_boolean(memgraph_with_text_indexed_data):
|
||||||
|
@ -38,5 +38,29 @@ def test_text_search_given_property(memgraph):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_text_search_all_properties(memgraph):
|
||||||
|
with pytest.raises(gqlalchemy.exceptions.GQLAlchemyDatabaseError, match=TEXT_SEARCH_DISABLED_ERROR) as _:
|
||||||
|
memgraph.execute(
|
||||||
|
"""CALL text_search.search_all("complianceDocuments", "Rules2024") YIELD node
|
||||||
|
RETURN node;"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_regex_text_search(memgraph):
|
||||||
|
with pytest.raises(gqlalchemy.exceptions.GQLAlchemyDatabaseError, match=TEXT_SEARCH_DISABLED_ERROR) as _:
|
||||||
|
memgraph.execute(
|
||||||
|
"""CALL text_search.regex_search("complianceDocuments", "wor.*s") YIELD node
|
||||||
|
RETURN node;"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_text_search_aggregate(memgraph):
|
||||||
|
with pytest.raises(gqlalchemy.exceptions.GQLAlchemyDatabaseError, match=TEXT_SEARCH_DISABLED_ERROR) as _:
|
||||||
|
memgraph.execute(
|
||||||
|
"""CALL text_search.aggregate("complianceDocuments", "wor.*s", "dummyAggregation") YIELD aggregation
|
||||||
|
RETURN aggregation;"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sys.exit(pytest.main([__file__, "-rA"]))
|
sys.exit(pytest.main([__file__, "-rA"]))
|
||||||
|
Loading…
Reference in New Issue
Block a user