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

时间:2015-05-05 11:16:05

标签: full-text-indexing arangodb

我想为数组属性创建全文索引,而不需要冗余地复制其所有字符串。我试过为“attrib [*]。字符串”定义索引,但这不起作用。我使用了错误的语法吗?如果没有,难以支持这样的索引场景吗?对于我天真的理解,除了创建索引时的阅读功能,功能上可能没有太大的区别......至少我希望这样: - )

1 个答案:

答案 0 :(得分:2)

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

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

因此,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全文索引可以处理的内容。