我用Firebase做了一个书写功能,但是当我搜索标题如果是“冰淇淋”时,当我搜索“冰淇淋”时它会出来,但当我搜索“奶油”时它不会出来。
我尝试过一个名为searchflex的插件,但它不起作用。 我在网上和AI上询问了我订购的方法,但我无法按照我所说的去做,所以我有一个问题。
import { db } from './firebaseConfig.js';
import { collection, getDocs } from 'firebase/firestore';
import { PostListManager } from './PostListManager.js';
export async function setupSearch() {
const searchButton = document.getElementById('searchBtn');
const searchInput = document.getElementById('searchInput');
const resultsContainer = document.getElementById('results');
const postListManager = new PostListManager('results');
async function loadData() {
try {
const querySnapshot = await getDocs(collection(db, 'posts'));
const posts = querySnapshot.docs.map(doc => ({
id: doc.id,
...doc.data()
}));
return posts;
} catch (error) {
console.error('Error loading data from Firestore:', error);
return [];
}
}
async function performSearch() {
const searchText = searchInput.value.trim().toLowerCase();
if (searchText === "") {
console.log("Empty search text.");
return;
}
try {
const posts = await loadData();
const filteredPosts = posts.filter(post => {
const titleMatch = post.title && post.title.toLowerCase().includes(searchText);
const descriptionMatch = post.description && post.description.toLowerCase().includes(searchText);
const contentMatch = post.content && post.content.toLowerCase().includes(searchText);
return titleMatch || descriptionMatch || contentMatch;
});
if (filteredPosts.length === 0) {
console.log('No matching documents found.');
} else {
console.log(`Found ${filteredPosts.length} matching documents.`);
}
postListManager.renderPosts(filteredPosts, false);
} catch (error) {
console.error('Error during search:', error);
}
}
// 검색 버튼 클릭 이벤트
searchButton.addEventListener('click', performSearch);
// 엔터 키 입력 시 검색 수행
searchInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
performSearch();
}
});
}
我用Firebase做了一个书写功能,但是当我搜索标题如果是“冰淇淋”时,当我搜索“冰淇淋”时它会出来,但当我搜索“奶油”时它不会出来。
这是预期的行为。您无法在 Firestore 中搜索子字符串后的内容。 Firestore 不支持全文搜索。除此之外,下载整个集合来搜索客户端字段是不切实际的。
查看有关 Firestore 中全文搜索的官方文档,在我回答这个问题时,有三个选项可用,分别是 Elastic Search、Algolia 和 Typesense。
如果需要,您可以使用相应的 Firebase 扩展来简化流程,它们是: