如何在数组属性上创建全文索引?

How to create a fulltext index on array attributes?

我想为数组属性创建一个全文索引,而不需要冗余地复制它的所有字符串。我尝试为 "attrib[*].string" 定义一个索引,但这不起作用。我使用了错误的语法吗?如果不是,是否很难支持这样的索引场景?对于我天真的理解,除了创建索引时的读取功能外,功能可能没有太大差异......至少我希望这样:-)

A​​rangoDB 2.5 及之前的版本中的全文索引仅支持为每个全文索引索引单个属性。索引属性中包含非字符串值的文档将被忽略以进行索引。这意味着在创建索引时既不能指定多个属性名称,也不能在文档中使用包含多个字符串值的数组。

我刚刚在 devel(即将发布的 2.6 版本)中添加了对全文功能的更改,允许索引对象值的直接子属性,前提是对象成员值是字符串。此外,现在支持索引数组值,前提是数组值是字符串。

因此 2.6 将支持以下内容:

 var c = db._create("example");
 c.ensureFulltextIndex("translations");
 c.insert({ translations: { en: "fox", de: "Fuchs", fr: "renard", ru: "лиса" } });
 c.insert({ translations: "Fox is the English translation of the German word Fuchs" });
 c.insert({ translations: [ "ArangoDB", "document", "database", "Foxx" ] });

 c.fulltext("translations", "лиса").toArray();       // returns only first document
 c.fulltext("translations", "Fox").toArray();        // returns first and second documents
 c.fulltext("translations", "prefix:Fox").toArray(); // returns all three documents

这可能不完全是所需要的(索引数组索引属性的每个数组成员的子属性),但应该更接近 2.5 中可能的内容。

在 2.5 中,唯一的选择是在每个文档中创建一个单独的属性,将所有待索引的文本值包含为一个连接字符串。这样所有内容都将包含在单个文本属性中,这就是 2.5 全文索引可以处理的内容。