Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArangoDB全文索引性能_Arangodb_Full Text Indexing - Fatal编程技术网

ArangoDB全文索引性能

ArangoDB全文索引性能,arangodb,full-text-indexing,Arangodb,Full Text Indexing,我有4842个文档,带有示例格式 {“ID”:“12345”,“NAME”:“NAME_value”,“KIND”:“KIND_value”,…,“Secondary”:{…},“Secondary”:{…},“Secondary”:{…}其中,“…”是每个对象的键值对的数量更多变化 在插入数据之前,我使用-db.collection.ensureFulltextIndex(“KIND”)将KIND索引为全文索引。而且,KIND只是一个单词字符串。没有空格 通过AQL执行了以下查询: 对于全文文

我有4842个文档,带有示例格式 {“ID”:“12345”,“NAME”:“NAME_value”,“KIND”:“KIND_value”,…,“Secondary”:{…},“Secondary”:{…},“Secondary”:{…}其中,“…”是每个对象的键值对的数量更多变化

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

通过AQL执行了以下查询:

  • 对于全文文档(集合、“种类”、“部署文件”)返回文档-->需要3.54s(平均)

  • 对于集合过滤器中的文档doc.KIND=='DeploymentFile'返回文档-->需要1.16s(平均值)

  • 在两个查询中都返回了2944个对象

    问题1。假设我们使用了全文索引,而我没有散列索引类型,那么使用全文函数的查询不应该比正常的==操作更快吗(因为==不使用全文索引)。如果是这样,我在这里做错了什么

    问题2。利用全文索引,我可以执行不包含字符串或类似字符串的查询吗


    ---更新Q2。要求在父字符串(仅为一个单词)中搜索子字符串。子字符串可以位于父字符串中的任何位置。(类似于“%text%”的SQL等价物)

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

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

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

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

    • “香蕉”:搜索包含“香蕉”的文档
    • “香蕉,苹果”:搜索同时包含“香蕉”和“苹果”的文档
    • “香蕉,|橙色”:搜索包含“香蕉”或“橙色”或两者的文档
    • “香蕉-苹果”:搜索包含“香蕉”但不包含“苹果”的文档
    逻辑运算符从左到右求值

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

    示例:

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

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

    我已经在笔记本上尝试了这些查询。使用arangosh以40ms/56ms的速度运行。您使用的是哪种驱动程序?谢谢您的及时回复。这意味着假设我有一个随机字符串“DeploymentFileName”,并且我想对“%File%”执行类似SQL的查询。有什么机制可以让我做到这一点吗?换句话说,肯定的“prefix:”将帮助我匹配搜索字符串开头的子字符串。如果子串位于搜索字符串的中间呢?@ Pravavajy:刚刚遇到这个问题。全文索引的实现仅支持全文和前缀匹配。AQL中的like运算符和like()函数可以进行类似
    %File%
    的搜索,但不能使用任何索引。事实上,它需要一种完全不同的索引类型来加速这种类型的搜索(我相信)。如果在调用LIKE()之前可以过滤掉索引支持的许多文档,那么性能可能是可以接受的。