【问题标题】:ArangoDB Full Text Index PerformanceArangoDB 全文索引性能
【发布时间】:2015-10-12 07:48:42
【问题描述】:

我有 4842 个样本格式的文档 {"ID":"12345","NAME":"name_value","KIND":"kind_value",...,"Secondary":{...},"Tertiary":{...}} 其中“...”是每个对象更多不同数量的键值对

在插入数据之前,我已使用 - db.collection.ensureFulltextIndex("KIND") 将 KIND 索引为全文索引。此外,KIND 只是一个单词字符串。 IE。没有空格

通过 AQL 执行了以下查询:

  1. FOR doc IN FULLTEXT(collection, 'KIND', 'DeploymentFile') RETURN doc --> 耗时 3.54 秒(平均)

  2. FOR doc IN collection FILTER doc.KIND == 'DeploymentFile' RETURN doc --> 需要 1.16 秒(平均)

两个查询都返回了 2944 个对象

第一季度。假设我们使用了全文索引并且我没有对 KIND 进行哈希索引,那么使用 FULLTEXT 函数的查询不应该比正常的 == 操作更快(因为 == 不使用全文索引)。如果是这样,我在这里做错了什么?

第二季度。利用全文索引,我可以执行包含字符串或 LIKE 字符串的查询吗?

---更新 Q2.要求是在父字符串(只有一个单词)中搜索子字符串。子字符串可以位于父字符串中的任何位置。 (SQL 等价于 LIKE '%text%')

【问题讨论】:

  • 我已经在笔记本上尝试过查询。使用 arangosh 在 40ms / 56ms 内运行。您使用的是哪个驱动程序?

标签: arangodb full-text-indexing


【解决方案1】:

Q1:全文索引确实允许更复杂的查询。它在分词处拆分文本并检查一个词是否出现在较大的文本中。您的示例中不需要所有这些功能。因此,它产生的开销大于节省的开销。

在您的示例中,最好创建一个跳过列表或哈希索引并搜索相等性。

Q2:在最简单的形式中,全文查询仅包含搜索的单词。如果一个查询中给出了多个搜索词,它们应该用逗号分隔。默认情况下,所有搜索词都将与逻辑 AND 组合,并且仅返回包含所有搜索词的文档。可以通过在全文查询中提供额外的控制字符来更改此默认行为,它们是:

  • +:逻辑与(交集)
  • |:逻辑或(并)
  • -: 否定(排除)

例子:

  • “banana”:搜索包含“banana”的文档
  • “banana,apple”:搜索同时包含“banana”和“apple”的文档
  • “banana,|orange”:搜索包含“banana”或“orange”或两者的文档
  • “banana,-apple”:搜索包含“banana”但不包含“apple”的文档。

逻辑运算符从左到右计算。

每个搜索词都可以选择以 complete: 或 prefix: 作为前缀,其中 complete: 是默认值。这允许搜索完整的单词或单词前缀。目前不支持后缀搜索或任何其他形式的部分单词匹配。

例子:

  • “complete:banana”:搜索包含确切单词“banana”的文档
  • “prefix:head”:搜索以前缀“head”开头的单词的文档
  • “prefix:head,banana”:搜索包含以前缀“head”开头的单词并且还包含确切单词“banana”的文档。

完全匹配和前缀搜索选项可以与逻辑运算符结合使用。

【讨论】:

  • 感谢您的及时回复。这意味着假设我有一个随机字符串“DeploymentFileName”并且我想对“%File%”执行一个 SQL 等效的 LIKE 查询。有什么机制可以实现这一目标吗?换句话说,绝对“前缀:”将帮助我匹配搜索字符串开头的子字符串。如果子字符串位于搜索字符串的中间怎么办?
  • @PranavAcharya:刚刚遇到这个问题。全文索引的实现只支持完全匹配和前缀匹配。像 %File% 这样的搜索可以使用 AQL 中的 LIKE 运算符和 LIKE() 函数进行,但不能使用任何索引。事实上,它需要一种完全不同类型的索引来加速这种类型的搜索(我相信后缀尝试)。如果您可以在调用 LIKE() 之前过滤掉索引支持的许多文档,那么性能可能是可以接受的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2021-01-24
  • 2013-05-30
相关资源
最近更新 更多