Arangodb 在遍历中使用两个ArangoSearch视图

Arangodb 在遍历中使用两个ArangoSearch视图,arangodb,Arangodb,考虑以下数据集: arangosh> db.createDocumentCollection('city') arangosh> db.createDocumentCollection('colour') arangosh> db._createEdgeCollection('likes') LET cities = [ { "key": "1", "cities": ["toronto", "kingston"] }, { "key":

考虑以下数据集:

arangosh> db.createDocumentCollection('city')
arangosh> db.createDocumentCollection('colour')
arangosh> db._createEdgeCollection('likes')

LET cities = 
[
  {
    "key": "1",
    "cities": ["toronto", "kingston"]
  },
  {
    "key": "2",
    "cities": ["seattle", "kingston"]
  },
  {
    "key": "3",
    "cities": ["seat", "kingston"]
  },
  {
    "key": "4",
    "cities": ["toronto", "seattle"]
  }
]

FOR c IN cities
    INSERT c INTO city
    RETURN NEW

LET colours = [
  {
    "key": "1",
    "colors": ["red", "love green"]
  },
  {
    "key": "2",
    "colors": ["we like red", "blue and purple"]
  },
  {
    "key": "3",
    "colors": ["grassy green"]
  },
  {
    "key": "4",
    "colors": ["red"]
  },
  {
    "key": "5",
    "colors": ["red"]
  },
  {
    "key": "6",
    "colors": ["red", "green"]
  }
]

FOR c IN colours
    INSERT c INTO colour
    RETURN NEW

LET likes = [
  {
    "from": "city/1", "to": "colour/3"
  },
  {
    "from": "city/1", "to": "colour/1"
  },
  {
    "from": "city/2", "to": "colour/3"
  },
  {
    "from": "city/3", "to": "colour/2"
  },
  {
    "from": "city/3", "to": "colour/3"
  },
  {
    "from": "city/3", "to": "colour/5"
  },
  {
    "from": "city/4", "to": "colour/5"
  },
  {
    "from": "city/4", "to": "colour/6"
  }
]

FOR l IN likes
    INSERT l INTO likes
    RETURN NEW


arangosh> db._createView("city_v", "arangosearch");
arangosh> var link = { 
  includeAllFields: false,
  fields : { cities : { analyzers : [ "text_en" ] } }
};
arangosh> db._view("city_v").properties({ links: { city: link }});


arangosh> db._createView("colour_v", "arangosearch");
arangosh> var link = { 
  includeAllFields: false,
  fields : { colors : { analyzers : [ "text_en" ] } }
};
arangosh> db._view("colour_v").properties({ links: { colour: link }});

FOR p IN city\u v搜索分析器(p.cities=='toronto','text\u en')返回p.\u id
返回

[
  "city/1",
  "city/4"
]
[
  "colour/1",
  "colour/3",
  "colour/6"
]
对于p-IN-color\u-v搜索分析器(p.colors=='green','text\u-en')返回p.\u-id
返回

[
  "city/1",
  "city/4"
]
[
  "colour/1",
  "colour/3",
  "colour/6"
]
我需要帮助编写一个查询,返回
city和color
组合,其中
city
满足
toronto
的ArangoSearchView,类似于
颜色
满足
绿色
的ArangoSearchView

结果应该是:
city/1->color/3
city/1->city/1
city/4->city/6


虽然我知道这个示例可以使用全文索引或其他一些
过滤器
机制,但目标是使用ArangoSearch视图的搜索功能来实现这一点。

您是否会像这样稍微更改您的模型:

LET cities = 
[
  {
    "_key": "1",
    "cities": ["toronto", "kingston"]
  },
  {
    "_key": "2",
    "cities": ["seattle", "kingston"]
  },
  {
    "_key": "3",
    "cities": ["seat", "kingston"]
  },
  {
    "_key": "4",
    "cities": ["toronto", "seattle"]
  }
]

FOR c IN cities
    INSERT c INTO city
    RETURN NEW

LET colours = [
  {
    "_key": "1",
    "colors": ["red", "love green"]
  },
  {
    "_key": "2",
    "colors": ["we like red", "blue and purple"]
  },
  {
    "_key": "3",
    "colors": ["grassy green"]
  },
  {
    "_key": "4",
    "colors": ["red"]
  },
  {
    "_key": "5",
    "colors": ["red"]
  },
  {
    "_key": "6",
    "colors": ["red", "green"]
  }
]

FOR c IN colours
    INSERT c INTO colour
    RETURN NEW

LET likes = [
  {
    "_from": "city/1", "_to": "colour/3"
  },
  {
    "_from": "city/1", "_to": "colour/1"
  },
  {
    "_from": "city/2", "_to": "colour/3"
  },
  {
    "_from": "city/3", "_to": "colour/2"
  },
  {
    "_from": "city/3", "_to": "colour/3"
  },
  {
    "_from": "city/3", "_to": "colour/5"
  },
  {
    "_from": "city/4", "_to": "colour/5"
  },
  {
    "_from": "city/4", "_to": "colour/6"
  }
]

FOR l IN likes
    INSERT l INTO likes
    RETURN NEW
然后运行以下查询:

LET clr = (FOR p IN colour_v SEARCH ANALYZER (p.colors == 'green', 'text_en') RETURN p)
FOR doc IN city_v SEARCH ANALYZER (doc.cities == 'toronto', 'text_en')
FOR v,e,p in 1..1 OUTBOUND doc likes
  filter p.vertices[1] in clr
  RETURN {"v":v,"e":e,"p":p}

您是否可以像这样稍微更改您的型号:

LET cities = 
[
  {
    "_key": "1",
    "cities": ["toronto", "kingston"]
  },
  {
    "_key": "2",
    "cities": ["seattle", "kingston"]
  },
  {
    "_key": "3",
    "cities": ["seat", "kingston"]
  },
  {
    "_key": "4",
    "cities": ["toronto", "seattle"]
  }
]

FOR c IN cities
    INSERT c INTO city
    RETURN NEW

LET colours = [
  {
    "_key": "1",
    "colors": ["red", "love green"]
  },
  {
    "_key": "2",
    "colors": ["we like red", "blue and purple"]
  },
  {
    "_key": "3",
    "colors": ["grassy green"]
  },
  {
    "_key": "4",
    "colors": ["red"]
  },
  {
    "_key": "5",
    "colors": ["red"]
  },
  {
    "_key": "6",
    "colors": ["red", "green"]
  }
]

FOR c IN colours
    INSERT c INTO colour
    RETURN NEW

LET likes = [
  {
    "_from": "city/1", "_to": "colour/3"
  },
  {
    "_from": "city/1", "_to": "colour/1"
  },
  {
    "_from": "city/2", "_to": "colour/3"
  },
  {
    "_from": "city/3", "_to": "colour/2"
  },
  {
    "_from": "city/3", "_to": "colour/3"
  },
  {
    "_from": "city/3", "_to": "colour/5"
  },
  {
    "_from": "city/4", "_to": "colour/5"
  },
  {
    "_from": "city/4", "_to": "colour/6"
  }
]

FOR l IN likes
    INSERT l INTO likes
    RETURN NEW
然后运行以下查询:

LET clr = (FOR p IN colour_v SEARCH ANALYZER (p.colors == 'green', 'text_en') RETURN p)
FOR doc IN city_v SEARCH ANALYZER (doc.cities == 'toronto', 'text_en')
FOR v,e,p in 1..1 OUTBOUND doc likes
  filter p.vertices[1] in clr
  RETURN {"v":v,"e":e,"p":p}