簡體   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