Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2011 07:58:18

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

Сделал табличку на коуче, осталось туда прикрутить фильтры. С простеньким полнотекстовым поиском проблем не стало пока (не знаю что будет с большим количеством записей). А вот с фильтрами по колонкам встала одна большая проблема.

Первый вариант: что пришол в голову это получить данные в с каждой колонки занести их в запрос типа keys = но тут главный недостаток значения должны быть полными если в “названии” стоит скажем “Книга” то не передаш “ни” нужно передать “Книга”, то есть нельзя написать
keys = и тд. такой себе своеобразный оператор И. Эта возможность оказывается тока в стадии разработки и может планируется в следующих версиях: https://issues.apache.org/jira/browse/COUCHDB-194.

Второй вариант: это индекс то есть map по каждому полю но мне этот вариант кажется извращенным, многовато индексов получится и вообще при частом занесении данных в табличку времени будет уходить на обновление этих индексов наверно больше чем если просто создать temporary map. Во общем на первый взгляд никакого быстродействия на данном этапе. Может как то можно такие вот выборки сделать другим способом?



Отредактировано (Янв. 17, 2011 08:01:35)

Офлайн

#2 Янв. 17, 2011 10:48:10

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

alexandre
Может как то можно такие вот выборки сделать другим способом?
Какие выборки? Вы так и не написали тольком, что за “фильтры” вы хотите сделать.



Офлайн

#3 Янв. 17, 2011 18:16:35

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

Допустим есть документы такого типа:

"head_field":{
"descr": "tgtttt",
"title": "матрица",
"price": "200",
"author": "вачовски",
"subtype": "очень хороший",
"date": "2011-01-12",

"genre": "фантастика"
}
"type":"book"
Я создаю мап и запрос с его участием:
function(doc) { 
var i;
var words = {};
var tails = {};
if (doc.doc_type == "book") {
for(var ii in doc.head_field){
var str = doc.head_field[ii];
str.replace(/[a-z0-9]+/gi,
function(word) {
words[word.toLowerCase()] = true;
}
);
}
for (w in words) {
for (i = 0; i < w.length; i += 1) {
tails[w.slice(i)] = true;
}
}
for (w in tails) {
emit(w, null);
}

}
}
docs_table = db.view("_design/filter/_view/substr", startkey=main_filter, endkey=main_filter + u"\ufff0", include_docs=True, limit=20, skip=0)
}
Вопрос простой как в параметры можно передать не одно слово а несколько и получить документы в которых есть эти значения? Без диапазона полнотекстовый поиск не будет сделан таком варианте. Насколько я понимаю это можно сделать только с функцией которая только будет реализована в будущем функционале коуча.



Отредактировано (Янв. 17, 2011 18:17:17)

Офлайн

#4 Янв. 17, 2011 18:39:44

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

Для полнотекстового поиска нужно применять CouchDB-Lucene. То что вы пытаетесь изобразить в общем случае не работает.



Офлайн

#5 Янв. 17, 2011 19:35:26

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

Мне не нужет супер полнотекстовый поиск это работает как мне нужно меня это полностью устраивает, мне интересно как можно получить диапазон значений или оператор И эмитировать.



Офлайн

#6 Янв. 18, 2011 12:11:05

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

alexandre
Вам же говорят, что никак. CouchDB сам по себе для этого не предназначен. Что можно использовать для этого, я уже посоветовал.



Офлайн

#7 Янв. 18, 2011 18:30:25

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

CouchDB и фильтры по колонкам таблицы.

Придется наверно вникать в тонкости CouchDB-Lucene ниче не поделать. Но хочется верить что в коуче будет реализован дополнительный функционал и они не будут останавливаться на том что есть.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version