如何高效排除特定TLD的域名节点?规避正则表达式查询
问题描述
现有存储域名的单个节点,执行Cypher查询:
MATCH (n) RETURN n.name
返回结果如下:
| n.name |
|---|
| "test01.bo-prod.htb" |
| "test01.bo-prod.local" |
| "testa01.bo-prod.intra" |
| "testa01.bo-prod.com" |
| "testa01.bo-prod.net" |
需求:仅返回非本地域名(排除后缀为.intra、.local、.htb的域名),且禁止使用正则表达式以保障查询性能,求最优实现方式。
最优实现方案
使用Neo4j内置的endsWith()字符串函数直接判断域名后缀,该函数属于原生字符串操作,性能远优于正则表达式,且逻辑清晰直观。
对应的Cypher查询语句如下:
MATCH (n) WHERE NOT n.name endsWith '.intra' AND NOT n.name endsWith '.local' AND NOT n.name endsWith '.htb' RETURN n.name
补充性能优化建议
如果域名节点数量较多,建议为n.name字段创建后缀索引,专门针对endsWith()这类后缀匹配场景做优化,能大幅加速查询速度。创建索引的语句如下(需替换YourNodeLabel为节点实际标签):
CREATE INDEX FOR (n:YourNodeLabel) ON (n.name) OPTIONS { indexConfig: { `neo4j.schema.suffix_index`: true } }
内容的提问来源于stack exchange,提问作者abhinav singh
相关产品推荐
相关产品推荐

