我有4842个样本格式的文档 {“ID”:“12345”,“NAME”:“name_value”,“KIND”:“kind_value”,...,“Secondary”:{...},“Tertiary”:{...}}其中“...”是每个对象的一些更多变化的键值对
在插入数据之前,我使用-db.collection.ensureFulltextIndex(“KIND”)将KIND索引为全文索引。另外,KIND只是一个单词字符串。即。没有空格
通过AQL执行以下查询:
FOR doc IN FULLTEXT(collection,'KIND','DeploymentFile')RETURN doc - >需要3.54s(平均)
FOR doc IN collection FILTER doc.KIND =='DeploymentFile'RETURN doc - >需要1.16s(平均)
2944两个查询中返回的对象
Q1。假设我们使用了全文索引并且我没有哈希索引的KIND,那么使用FULLTEXT函数的查询不应该比普通的==操作更快(因为==不使用全文索引)。如果是这样,我在这里做错了什么?
Q2。利用全文索引,我可以执行查询,该查询执行CONTAINS字符串或LIKE字符串吗?
--- UPDATE Q2。要求是在父字符串中搜索子字符串(只有一个字)。子字符串可以位于父字符串中的任何位置。 (SQL等效于LIKE'%text%')
答案 0 :(得分:2)
Q1:全文索引确实允许更复杂的查询。它会在分词处拆分文本,并检查单词是否出现在较大的文本中。您的示例中不需要所有这些功能。因此,它会产生比保存更多的开销。
在您的示例中,最好创建一个跳过列表或哈希索引并搜索相等。
Q2:在最简单的形式中,全文查询仅包含所搜索的单词。如果查询中给出了多个搜索词,则应使用逗号分隔。默认情况下,所有搜索词将与逻辑AND组合,并且仅返回包含所有搜索词的此类文档。可以通过在全文查询中提供额外的控制字符来更改此默认行为:
示例:
逻辑运算符从左到右进行评估。
每个搜索词都可以选择带有完整的前缀:或前缀:,其中:complete是默认值。这允许搜索完整的单词或单词前缀。目前不支持后缀搜索或任何其他形式的部分字匹配。
示例:
完整的匹配和前缀搜索选项可以与逻辑运算符结合使用。