2017-04-21 93 views
2

我正在研究搜索功能。我的實時數據庫中有超過2000種產品的列表。Firebase搜索查詢會給出不同的結果

我試着用3個查詢搜索Shampoo。但是沒有一個查詢返回字符串「Shampoo」所需的產品名稱。

但是Query 1 & 2返回下面的產品,如下圖所示,產品名稱節點中沒有「Shampoo」。

我想不通爲什麼會發生?

CODE

const databaseRef = firebase.database().ref('S01/Products'); 

    // Search Query 1 - Shows Different Product (Refer above image) 
     var query = databaseRef.orderByChild("productName").startAt("Shampoo"); 

    // Search Query 2 - Shows Different Product (Refer above image) 
     var query = databaseRef.orderByChild("productName").endAt("Shampoo"); 

// Search Query 3 - Shows Different Product (Refer above image) 
     var query = databaseRef.orderByChild("productName").startAt("Shampoo").endAt("~"); 

// Search Query 3 - Returns no Products 
     var query = databaseRef.orderByChild("productName").equalTo("Shampoo"); 

// Search Query 3 - Returns no Products 
     var query = databaseRef.orderByChild("productName").startAt("Shampoo").endAt("Shampoo" + "~"); 

     query.once("value") 
     .then(function (snapshot) { 
      snapshot.forEach(function (childSnapshot) { 

      var t = $('#products_table').DataTable(); 

      var key = childSnapshot.key; 

      var MID = childSnapshot.child("productMID").val(); 
      var SID = childSnapshot.child("productSID").val(); 
      var ProductID = childSnapshot.child("productID").val(); 
      var name = childSnapshot.child("productName").val(); 
      var unit = childSnapshot.child("productUnit").val(); 
      var productMRP = childSnapshot.child("productMRP").val(); 
      var price = childSnapshot.child("productSellingPrice").val(); 
      var buying_price = childSnapshot.child("productBuyingPrice").val(); 
      var productStatus = childSnapshot.child("productStatus").val(); 

      var row = ""; 

      t.row.add(['<td class="cell-60 responsive-hide"></td><td class="cell-300">', '<td>' + name + '</td>', '<td>' + unit + '</td>', '<td tabindex="1">' + productMRP + '</td>', '<td tabindex="2">' + price + '<\/td>', '<td tabindex="3">' + buying_price + '<\/td>', productStatus]).node().id = ProductID; 
      }); 
     }); 

enter image description here

回答

1

查詢像這樣:

var query = databaseRef.orderByChild("productName").startAt("Shampoo"); 

將產生字母順序排序的產品列表通過productName開頭,開頭的名字「洗髮水」或按字母順序排在「洗髮水」之後的任何字符串。它確實而不是要求產品名稱中包含「洗髮水」。此外,如果名稱不是以「洗髮水」之後的東西開頭,那麼它將不包括做的在名稱中嵌入「洗髮水」的產品。

例如,「我最喜愛的洗髮水」將被排除,因爲'M'<'S'。任何以大於'S'的字母開頭的產品名稱都將包括在內,因爲「Su」會跟在「Sh」之後。

Firebase API不支持對值中包含文本的查詢(SQL:WHERE productName LIKE %shampoo%)。有關Firebase blog post的更多詳細信息,可以鏈接到ElasticSearch作爲提前文本搜索的選項。