我正在使用搜索功能。我的实时数据库中有2000多种产品的清单。

我尝试用3个查询搜索Shampoo。但是,没有一个查询返回带有字符串“ Shampoo”的所需产品名称。

但是Query 1 & 2返回的产品类似下图,在“产品名称”节点中没有“洗发水”。

我不知道为什么会这样?

javascript - Firebase搜索查询给出不同的结果-LMLPHP



    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;
          });
        });


javascript - Firebase搜索查询给出不同的结果-LMLPHP

最佳答案

这样的查询:

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


会产生一个产品列表,该列表以productName字母顺序排列,并以“ Shampoo”开头的名字或“ Shampoo”后面的任何字符串开头。不需要在产品名称中包含“洗发水”。此外,如果名称中没有以“ Shampoo”开头的名称,则该产品将不包含在其名称中嵌入“ Shampoo”的产品。

例如,将排除“我最喜欢的洗发水”,因为“ M”
Firebase API不支持查询值中包含“文本”的文本(SQL:WHERE productName LIKE %shampoo%)。 Firebase blog post上的更多详细信息,带有指向ElasticSearch的链接,作为高级文本搜索的选项。

10-04 16:38