我想在CouchDB中執行LIKE條件(SQL語法)。如何才能做到這一點? LIKE條件將用於在瀏覽器中執行自動完成。CouchDB中的類似條件
我想在輸入字段中寫入「co」並獲得結果Coffee,Couch,CouchDB等。
我想在CouchDB中執行LIKE條件(SQL語法)。如何才能做到這一點? LIKE條件將用於在瀏覽器中執行自動完成。CouchDB中的類似條件
我想在輸入字段中寫入「co」並獲得結果Coffee,Couch,CouchDB等。
在字符串的開頭搜索字母非常容易。你只需要一個視圖來發出你想要搜索的字符串作爲鍵。假設用戶輸入存儲在變量q
中,則可以使用參數startkey=q
和endkey=q+"\ufff0"
調用該視圖。
這裏的技巧是將最高可能的Unicode字符附加到搜索字符串。在排序順序中,該字符串位於以q
開頭的任何其他位置之後。 (這比@titanoboa建議的解決方案實現起來要容易得多,您需要「增加」用戶輸入的最後一個字母。)
如果您還希望能夠找到字符串(如「科爾伯特報告」中鍵入「合作」的時候),你可以使用這樣一個觀點:
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。最好的嘗試是與CouchDB配合使用的Lucene搜索引擎。 Lucene是專爲全文搜索而設計的,基本上你在找什麼。 Here是關於組合的一些說明。
要實現您的示例,您可以創建一個視圖,將您的字段作爲鍵和相同的字段,整個文檔或任何您想要的值作爲值。如果使用參數startkey="co", endkey="cp", inclusive_end=false
查詢視圖,您將獲得以「co」開頭的所有條目。
當然,這不如'LIKE'強大。
爲什麼最高可能的Unicode字符「fff0」而不是「ffff」? – Jez 2016-09-20 13:37:14
@Jez這是一個很好的問題,我不知道爲什麼我當時寫了'\ ufff0'。我認爲正確的代碼點將會是'\ uFFFF}',但我沒有測試過這個。 (https://en.wikipedia.org/wiki/UTF-8#Description) – 2017-02-20 09:26:36