全文索引如何高效查询值同时包含多个值

  • nebula 版本:2.0-rc1

我有个全文索引,里面存储List 的json结构。目前有个需求要查询值里面是否包含多个指定元素。
例如:
顶点属性存储示例: ‘[“a”, “b”, “c”]’。
想查询包含’a’, ‘c’ 元素的顶点。

创建tag和插入值的nGQL:
CREATE TAG testTag(propName string);
CREATE TAG INDEX propName_index ON testTag(propName(20));
INSERT VERTEX testTag(propName) values ‘a’:(‘[“a”, “b”, “c”]’);

目前使用的查询方式:
LOOKUP ON testTag WHERE WILDCARD(testTag.propName, ‘"a"’) INTERSECT LOOKUP ON testTag WHERE WILDCARD(testTag.propName, ‘"b"’);

但是使用交集 + 正则的查询实测比较低效,请问是否有更高效的查询方式?谢谢

您好,WILDCARD,REGEXP 和 FUZZY 三个函数应该都能完成这个功能,目前这个功能也只有这三个函数能支持。如果有性能问题,建议尝试一下设置 limit 为 1,这样的话只要第三方全文引擎查到第一条符合条件的值即立刻返回,应该能缓解一下性能问题。另外,也可以针对第三方全文引擎(ES)进行一下调优,或者根据实际业务,改进一下 template.