我正在研究搜索功能。我在我的实时数据库中列出了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;
});
});
答案 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的链接,作为高级文本搜索的选项。