Я хотел бы создать полнотекстовый индекс для атрибута массива без необходимости избыточно копировать все его строки. Я попытался определить индекс для "attrib [*]. String", но это не сработает. Я использую неправильный синтаксис? Если нет, трудно ли поддержать такой индексный сценарий? Для моего наивного понимания не может быть большой разницы в функции, кроме функции чтения при создании индекса ... по крайней мере, я надеюсь, что это :-)Как создать полнотекстовый индекс для атрибутов массива?
ответ
Полнотекстовая индексация в версиях АрангоДБ 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-полнотекстовый индекс.
Для меня ваше усовершенствование 2.6 будет делать то, что мне обычно нужно. Большое спасибо! –