是否可以使用ArangoSearch视图索引嵌套属性?

时间:2019-05-28 15:02:02

标签: arangodb

我想在以下文档中创建一个ArangoSearch视图:

  "Title": [
    {
      "lang": "en",
      "value": "Game of thrones"
    },
    {
      "lang": "fr",
      "value": "Throne de fer"
    }
  ]
}

我试图像这样链接视图:

{"links": {
    "SearchTest": {
      "analyzers": [
        "identity",
        "text_en",
        "text_fr"
      ],
      "fields": {
        "Title[0].value": {
          "analyzers": [
            "text_en"
          ]
        },
        "Title[1].value": {
          "analyzers": [
            "text_fr"
          ]
        }
      },
      "includeAllFields": true,
      "storeValues": "id",
      "trackListPositions": false
    }
  }}

但是我似乎没有工作

这是查询

FOR d IN SearchTestVW SEARCH PHRASE(d.Title[0].value,'Game','text_en') RETURN d

它不返回任何结果。甚至有可能这样做吗?我已经尝试过使用根属性,并且效果很好。但是我们的文档的结构是这样的。

1 个答案:

答案 0 :(得分:0)

可以使用fields: { "objectName": fields: "fieldName"}嵌套。如果您在“根”级别上定义所有分析器并将includeAllFields设置为true,则甚至不需要单独指定字段。

您可以在对象级别使用分析器,并仅定义搜索索引应涵盖的属性。这样可以减小索引的大小,并且您可以排除可能只会在结果中添加“噪音”的字段。

  "links": {
    "SearchTest": {
      "analyzers": [
        "identity"
      ],
      "fields": {
        "Title": {
          "analyzers": [
            "text_en"
          ],
          "fields": {
            "value": {},
            "lang": {}
          }
        }
      },
      "includeAllFields": false,
      "storeValues": "none",
      "trackListPositions": false

现在这应该可行:

FOR d IN SearchTestVW SEARCH PHRASE(d.Title.value,'Game','text_en') RETURN d