Firebase搜索查询会给出不同的结果

时间:2017-04-21 18:14:15

标签: javascript firebase firebase-realtime-database

我正在研究搜索功能。我在我的实时数据库中列出了2000多种产品。

我尝试使用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 个答案:

答案 0 :(得分:1)

这样的查询:

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

将生成按productName按字母顺序排序的产品列表,从“洗发水”开头的名字开头,或按字母顺序跟随“洗发水”的任何字符串。 要求产品在产品名称中包含“洗发水”。此外,如果名称不是以“洗发水”之后的名称开头,它将不包括名称中嵌入“洗发水” 的产品。

例如,“我最喜欢的洗发水”将被排除在外,因为'M'&lt; 'S'。将包含以大于'S'开头的任何产品名称,以及“Super Soap”,因为“Su”跟随“Sh”。

Firebase API不支持查询值“包含”的文本(SQL:WHERE productName LIKE %shampoo%)。有关此Firebase blog post的更多详细信息,其中包含指向ElasticSearch的链接,作为高级文本搜索的选项。