在ArangoDB中,我正在使用一个测试集合,该集合是从他们的网站下载的csv格式的IMDB数据集。电影文档的结构如下:
movies:
{
_key: 123456,
name: "Movie title",
... ,
releases: [
{ title: "Local title",
region: 'US',
language: 'en',
... },
{ title: "Other title",
region: 'GB',
language: '??'
... }
]
}
我已经在movies.releases[*].title
字段上创建了一个索引,我对查询该字段很感兴趣,不仅通过相等性,而且通过使用不区分大小写和子字符串匹配。
问题是,唯一一种使用索引的查询是当我这样做的时候:
FOR doc IN movies:
FILTER 'search' IN doc.releases[*].title
这样,我只能以区分大小写的方式匹配整个字符串:我如何以不区分大小写方式查找子字符串?
我不能使用全文索引,因为ArangoDB不支持在数组中使用它,而且我不能使用LOWER()
和CONTAINS()
,因为它是一个数组。
有什么想法吗?
谢谢你!
1条答案
按热度按时间7rtdyuoh1#
您可以嵌套搜索,这样您就可以在数组中进行搜索,而无需使用'[*]'符号来应用约束。
下面的示例在每个releases数组中执行搜索,查找不区分大小写的匹配项,如果找到匹配项则返回。
如果至少有一个发行版有匹配项,则FILTER函数将只返回电影。
直接将
'title'
更改为参数。注意:为了减轻查询压力,
matches
变量的目标是,如果存在包含您的关键字的release,则LENGTH属性大于0。上面的函数有一行
RETURN release
,当你不阅读它的时候,它可能会返回大量的数据,所以另一种选择是用RETURN true
替换该行,因为这是强制matches
成为一个数组并使LENGTH
大于0所需要的。