簡體   English   中英

CouchDB中的Like-condition

[英]Like-condition in CouchDB

我想在CouchDB中執行LIKE條件(SQL語法)。 如何才能做到這一點? LIKE條件將用於在瀏覽器中執行自動完成。

我想在輸入字段中寫“co”並獲得結果Coffee,Couch,CouchDB等。

在字符串的開頭搜索字母非常容易。 您只需要一個視圖,將您要搜索的字符串作為鍵發出。 假設用戶輸入存儲在變量q ,則使用參數startkey=qendkey=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM