[英]Like-condition in CouchDB
我想在CouchDB中執行LIKE條件(SQL語法)。 如何才能做到這一點? LIKE條件將用於在瀏覽器中執行自動完成。
我想在輸入字段中寫“co”並獲得結果Coffee,Couch,CouchDB等。
在字符串的開頭搜索字母非常容易。 您只需要一個視圖,將您要搜索的字符串作為鍵發出。 假設用戶輸入存儲在變量q
,則使用參數startkey=q
和endkey=q+"\"
調用該視圖。
這里的技巧是將最高可能的Unicode字符附加到搜索字符串。 在排序順序中,此字符串位於以q
開頭的任何其他內容之后。 (這比@titanoboa建議的解決方案更容易實現,您需要“增加”用戶輸入的最后一個字母。)
如果您還希望能夠在字符串中間找到單詞(例如,鍵入“co”時的“The Colbert Report”),您可以使用如下視圖:
function(doc) {
if (doc.title) {
var words = {};
doc.title.replace(/\w+/g, function(word) {
words[word.toLowerCase()] = true;
});
for (w in words) {
emit(w, doc);
}
}
}
當然這只適用於短串。 要在較長的文本中搜索,您應該查看像couchdb-lucene這樣的全文搜索插件。
這不適用於CouchDB。 最好的嘗試是Lucene搜索引擎,它與CouchDB配合得很好。 Lucene專為全文搜索而設計,基本上就是您所尋找的。 以下是組合的一些說明。
要實現您的示例,您可以創建一個視圖,該視圖將您的字段作為鍵和相同的字段,整個文檔或您想要的任何值作為值。 如果使用參數startkey="co", endkey="cp", inclusive_end=false
查詢視圖,您將獲得所有帶有以“co”開頭的鍵的條目。
當然,這不如'LIKE'強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.