我创建了一个用Firebase编写的函数,但是实现搜索功能有问题

问题描述 投票:0回答:1

我用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();
        }
    });
}

javascript firebase google-cloud-platform google-cloud-firestore search
1个回答
0
投票

我用Firebase做了一个书写功能,但是当我搜索标题如果是“冰淇淋”时,当我搜索“冰淇淋”时它会出来,但当我搜索“奶油”时它不会出来。

这是预期的行为。您无法在 Firestore 中搜索子字符串后的内容。 Firestore 不支持全文搜索。除此之外,下载整个集合来搜索客户端字段是不切实际的。

查看有关 Firestore 中全文搜索的官方文档,在我回答这个问题时,有三个选项可用,分别是 Elastic SearchAlgoliaTypesense

如果需要,您可以使用相应的 Firebase 扩展来简化流程,它们是:

© www.soinside.com 2019 - 2024. All rights reserved.