2017-02-01 7 views
0

Я разработчик приложения Couchbase/AngularJS/Express.js/Node.JS. Текущее состояние приложения - это начало тестирования пользователей. По мере того, как пользователи обращаются к новому приложению, пользователь хочет получить извлечение из Couchbase для проверки эффективности. Пользователь чувствует, что поиск слишком долго возвращается из Couchbase. Как опытный программист SQL и изучение N1QL, мой опыт SQL говорит мне, что запрос невозможен.Couchbase - Slow Retrieval

Процесс включает в себя следующее:

  • 1700 до 1800 JSON Документы

  • Ожидаемый доход равен либо нулю, либо какие-то документы

  • Все документы невозможно (объясню позже).

  • Данные должны перемещаться по Атлантике, поскольку данные и приложение будут находиться на машине в Англии.

Пользователь вводит минимум три символа для поиска имени и ожидает, что список возвращаемых имен будет содержать введенные символы. Помните, что больше символов, введенных пользователем, приводит к гораздо более изысканному поиску. Проблема пользователя заключается в том, что для возврата требуется несколько секунд.

Оператор N1QL выглядит следующим образом:

SELECT id, 
     name, 
     abbr, 
     meta(bucket).id meta_id 
FROM bucket 
WHERE type = 'store' 
    and Upper(name) like Upper('%passedinname%’) 
order by name 

Если пользователь вводит, «ABC», оператор N1QL вернет всю информацию о документе в формате JSON, где магазин JSON документ содержит «ABC» в названии. Например, если бы я имел магазины с именем:

  1. ABC Market

  2. Марии AbC Deli

Оба документа вернутся. Как вы можете заметить, я должен держать регистр поиска нечувствительным. Это соответствует запросу пользователя.

Я просмотрел варианты в Couchbase. Я считаю, что нет надежных средств для увеличения скорости поиска. Я заглянул в Couchbase View. Я не вижу, как я могу применить к нему свою инструкцию N1QL. Сценарий couch.model.js позволяет только извлекать из представления. Это не позволяет ввести критерии поиска, а не ключевые значения.

Я заглянул в индекс Couchbase. Я не вижу, как я могу применить к нему свою инструкцию N1QL. Оператору N1QL по-прежнему нужно искать каждый документ JSON магазина для «пройденного имени».

Я даже просмотрел полный поиск текста Couchbase. Я не могу использовать этот параметр. Департамент разработал политику по его предотвращению.

Если у вас есть возможное решение, пожалуйста, сделайте предложение. Я благодарен всем предложениям с благодарностью.

ТИА Энтони

ответ

0

Вам повезло. В отличие от SQL, N1QL обрабатывает это с индексированным ускорением.Существует два подхода: один для произвольных подстрок, включая частичные слова, а другой для целых слов и/или жетонов.

Для частичных слов см. Функцию SUFFIXES(). Это более подходит для более коротких полей (например, тегов, имени, названия), чем более длинные поля (например, подробное описание).

Для всех слов см. TOKENS() и SPLIT().

Оба подхода описаны в этих статьях.

https://dzone.com/articles/a-couchbase-index-technique-for-like-predicates-wi

https://dzone.com/articles/split-and-conquer-efficient-string-search-with-n1q

https://dzone.com/articles/more-than-like-efficient-json-search-with-couchbas

+0

Спасибо за ответ. Похоже, что я могу использовать функцию SUFFIXES. Мне нужно будет узнать ожидаемый график обновления. Поскольку версия в настоящее время не содержит функцию SUFFIXES. –