我正在使用搜索功能。我的实时数据库中有2000多种产品的清单。
我尝试用3个查询搜索Shampoo
。但是,没有一个查询返回带有字符串“ Shampoo”的所需产品名称。
但是Query 1 & 2
返回的产品类似下图,在“产品名称”节点中没有“洗发水”。
我不知道为什么会这样?
码
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;
});
});
最佳答案
这样的查询:
var query = databaseRef.orderByChild("productName").startAt("Shampoo");
会产生一个产品列表,该列表以
productName
字母顺序排列,并以“ Shampoo”开头的名字或“ Shampoo”后面的任何字符串开头。不需要在产品名称中包含“洗发水”。此外,如果名称中没有以“ Shampoo”开头的名称,则该产品将不包含在其名称中嵌入“ Shampoo”的产品。例如,将排除“我最喜欢的洗发水”,因为“ M”
Firebase API不支持查询值中包含“文本”的文本(SQL:
WHERE productName LIKE %shampoo%
)。 Firebase blog post上的更多详细信息,带有指向ElasticSearch的链接,作为高级文本搜索的选项。