繁体   English   中英

在ArangoDb群集上进行了两个FULLTEXT搜索:涉及到V8

[英]Two FULLTEXT searches on ArangoDb Cluster: V8 is involved

我正在研究ArangoDb群集,发现在使用情况下,两个FULLTEXT()搜索其中之一涉及V8引擎。 我的资料:

[
{
"TITL": "Attacks induced by bromocryptin in Parkinson patients",
"WORD": [
        "hascites",
        "Six patients with Parkinson's disease"
         ],
"ID":1,
},
{
"TITL": "Linear modeling of possible mechanisms for Parkinson tremor generation",
"WORD": [
        "hascites",
        "jsubsetIM"
         ],
"ID":2,
},
{
"TITL": "Drug-induced parkinsonism in the rat- a model for biochemical ...",
"WORD": [
        "hascites",
        "Following treatment with reserpine or alternatively with ...",
        "hasabstract"
        ],
"ID":3,
}
]

最简单的查询:

FOR title IN FULLTEXT(pmshort,"TITL","parkinson")
    FOR word IN FULLTEXT(pmshort,"WORD","hascites")
        FILTER title.ID==word.ID
    RETURN title

换句话说,我正在尝试查找hascites中具有parkinsonWORD中具有TITL所有文档。 这个例子被认真地简化了,所以类似

FILTER word.WORD=='hascites'

不可能。 为了提供必要的功能,需要两次或多次FULLTEXT搜索。 馆藏约有52万份文件。 在每个字段上设置全文索引。

我发现,分别运行的每个FULLTEXT查询都涉及索引:

Execution plan:
 Id   NodeType        Site         Est.   Comment
  1   SingletonNode   DBS             1   * ROOT
  5   IndexNode       DBS        526577     - FOR title IN pmshort   /* fulltext index scan */
  8   RemoteNode      COOR       526577       - REMOTE
  9   GatherNode      COOR       526577       - GATHER 
  4   ReturnNode      COOR       526577       - RETURN title

但是,在使用情况下, FOR第一个都是由V8(JavaScript)处理的,并在协调器上运行,而不是在DBS上运行:

Execution plan:
 Id   NodeType            Site           Est.   Comment
  1   SingletonNode       COOR              1   * ROOT
  2   CalculationNode     COOR              1     - LET #2 = FULLTEXT(pmshort   /* all collection documents */, "TITL", "parkinson")   /* v8 expression */
  3   EnumerateListNode   COOR            100     - FOR title IN #2   /* list iteration */
 10   ScatterNode         COOR            100       - SCATTER
 11   RemoteNode          DBS             100       - REMOTE
  9   IndexNode           DBS        52657700       - FOR word IN pmshort   /* fulltext index scan */
  6   CalculationNode     DBS        52657700         - LET #6 = (title.`ID` == word.`ID`)   /* simple expression */   /* collections used: word : pmshort */
  7   FilterNode          DBS        52657700         - FILTER #6
 12   RemoteNode          COOR       52657700         - REMOTE
 13   GatherNode          COOR       52657700         - GATHER 
  8   ReturnNode          COOR       52657700         - RETURN title

当然,这会大大减慢系统速度。 所以我的问题是:1.为什么ArangoDb集群不能在DBS上而不是在协调器(COOR)上处理两个条件? 2.由于性能下降300-500倍,如何避免这种情况? 3.可能有人可以指出一些其他材料来阅读此内容。

任何帮助表示赞赏。 谢谢!

在每个查询/子查询中应用了一个全文转换之后,查询优化器似乎停止寻求进一步的全文改进。

可以在此拉取请求 (针对3.3.10)中找到可能的解决方案。

非常感谢! 它应该在3.3.10和将来的3.4中可用,对吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM