2015-05-05 2 views
2

Я хотел бы создать полнотекстовый индекс для атрибута массива без необходимости избыточно копировать все его строки. Я попытался определить индекс для "attrib [*]. String", но это не сработает. Я использую неправильный синтаксис? Если нет, трудно ли поддержать такой индексный сценарий? Для моего наивного понимания не может быть большой разницы в функции, кроме функции чтения при создании индекса ... по крайней мере, я надеюсь, что это :-)Как создать полнотекстовый индекс для атрибутов массива?

ответ

2

Полнотекстовая индексация в версиях АрангоДБ 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-полнотекстовый индекс.

+1

Для меня ваше усовершенствование 2.6 будет делать то, что мне обычно нужно. Большое спасибо! –