فهرست مستندات پروژه
دستورکارها و رفع مشکل
تفاوت نتیجهها را بررسی کنید، متن اصلی را نمایش دهید و اشکالهای تاییدشده را در نظر بگیرید.
وقتی نتیجهای پیدا نمیشود، پیش از تغییر رتبهبندی یا فعال کردن تطبیق تقریبی، عبارتهای جستجو و سند نمایهشده را بررسی کنید. نمونههای نمایهسازی تفاوت دو حالت را نشان میدهند.
ساخت محدوده برجستهسازی برای UI سفارشی
برای تطبیق دقیق عبارت پردازششده، محدوده متن اصلی را جمع کنید و متن اصلی را با گره متنی و عنصر mark نمایش دهید. این نمونه محدوده میدهد، نه HTML:
import { createAnalyzer } from "fa-search-kit";
const analyzer = createAnalyzer();
const text = "كتابهاي قديمي";
const query = "کتاب";
const wanted = new Set(analyzer.analyze(query, { mode: "query" }));
const ranges = analyzer.tokens(text)
.filter(token => analyzer.analyze(token.text, { mode: "index" }).some(term => wanted.has(term)))
.map(({ start, end }) => [start, end]);
console.log(JSON.stringify(ranges)); // => [[0,7]]
پیش از نمایش، محدودههای همپوشان را ادغام کنید. برای موتور پیشوندی یا تقریبی، شرط تطبیق را با رفتار موتور هماهنگ کنید. تا رفع اشکال موقعیت زیر، برای ورودی دارای نویسه خارج از محدوده پایه از برجستهسازی توکنی صرف نظر کنید و چکیده اصلی را به صورت متن ساده نشان دهید. حذف ایموجی پیش از پردازش موقعیتها را عوض میکند و روش درستی برای برجستهسازی رشته اصلی نیست.
مشکلهای رایج اتصال
- full هنگام شروع خطا میدهد:
lexiconرا صریح وارد کنید و همراهprofile: "full"بدهید. - نتیجه پس از استقرار تغییر میکند: تنظیمات و نسخه بسته در نمایه و جستجو را مقایسه کنید، سپس خروجیهای سازگار را با هم بسازید و مستقر کنید.
- Pagefind بنها یا عنوان عجیب نشان میدهد: پیش از نمایهسازی آمادهسازی را انجام دهید و پس از دریافت هر نتیجه
processResultرا اجرا کنید. زبان صفحه اصلی بایدfaباشد. - صفحه مورد انتظار در Pagefind نیست:
data-pagefind-body، نشانگرهای ignore، نشانی بسته تولیدشده، ارائه HTTP و خطاهای ساخت را بررسی کنید. - MiniSearch شکلهای مختلف را از دست میدهد: هنگام افزودن تنظیمات،
fa.searchOptionsرا ادغام کنید. - Orama تنظیمات را رد میکند: همراه توکنساز سفارشی
languageندهید وexact: trueآن را جایگزینexactTermsنکنید. - FlexSearch بخشهای ترکیب را پیدا نمیکند: اگر جایگزینهای نمایه را میخواهید، از نوشتن همزمان
faDocumentاستفاده کنید، نهfaEncodeیا worker و نوشتن ناهمزمان. - رفتار عبارت در Lunr متفاوت است:
fa.searchرا فراخوانی کنید، نهindex.search. - اصلاح پیشنهاد مفیدی ندارد: واژههای جمعشده،
isKnown، خطای شبکه و نتیجه واقعی نامزد را بررسی کنید. نداشتن پیشنهاد خروجی قابل انتظار است.
اشکالهای تاییدشده این سورس
نمونه اجرایی زیر رفتار فعلی را ثبت میکند، نه رفتار مطلوب را:
import { createAnalyzer, Stemmer } from "fa-search-kit";
import { lexicon } from "fa-search-kit/lexicon";
import { createRescue } from "fa-search-kit/rescue";
const analyzer = createAnalyzer();
const token = analyzer.tokens("😀 کتاب")[0];
console.log(JSON.stringify([token.text, token.start, token.end ?? null])); // => ["کتاب",4,null]
console.log(JSON.stringify(new Stemmer({ lexicon, joinedMi: "lexicon", verbLemmas: false }).stem("میکنند"))); // => "میکنند"
const rescue = createRescue({ analyzer });
rescue.addText("صابون طبیعی");
await rescue.check("دیجی", 0);
rescue.addText("دیجی کالا");
console.log(JSON.stringify((await rescue.check("nd[d", 0))?.to ?? null)); // => null
const fresh = createRescue({ analyzer });
fresh.addText("صابون طبیعی دیجی کالا");
console.log(JSON.stringify((await fresh.check("nd[d", 0))?.to ?? null)); // => "دیجی"
موقعیت نویسه خارج از محدوده پایه یونیکد
توکن پس از ایموجی باید محدوده [3, 7] داشته باشد. اکنون شروع آن 4 و پایان آن undefined است که در خروجی بالا null نمایش داده شده. یکسانسازی محدوده را بر اساس code point ذخیره میکند اما توکنسازی از واحد UTF-16 استفاده میکند. برجستهسازی متن اصلی، چکیده Pagefind و احتمالا ویرایش اصلاح جستجو در چنین رشتههایی متاثر میشوند. این اشکال مانع ادعای برجستهسازی درست برای همه متنهای یونیکد است.
گزینه واژهنامه برای پیشوند چسبیده
نوع joinedMi: "lexicon" وجود دارد، اما شاخه اختصاصی رفتار مستندشده پیشوند چسبیده با بررسی واژهنامه پیاده نشده است. با verbLemmas: false، صورت شناختهشده چسبیده در نمونه بدون تغییر میماند. بر اساس نیاز، پیشفرض joinedMi: "rule" تحلیلگر یا تحلیل lemma پروفایل full را انتخاب کنید؛ هیچکدام به معنی کامل بودن پیادهسازی گزینه گمشده نیست.
تغییر واژههای اصلاح جستجو
نتیجه منفی تشخیص واژه ذخیره میشود. addText عبارتها را اضافه میکند اما این حافظه نهان را پاک نمیکند؛ پس اصلاح صفحهکلید ممکن است واژه تازه را از دست بدهد. نمونه تازه اصلاحگر تفاوت را نشان میدهد. پیش از جستجو واژهها را جمع کنید و پس از تغییر محتوا، نمونه اصلاحگر را دوباره بسازید. API فعلی reset یا remove ندارد.
برای پنهان کردن این اشکالها سورس کتابخانه تغییر نکرده است. رفع آنها و آزمون جلوگیری از بازگشت خطا باید در کاری جدا انجام شود.
اعتبارسنجی محلی مستندات
از این مخزن، npm run build، npm run typecheck، npm test و node scripts/check-docs.mjs را اجرا کنید. بررسی مستندات، ناوبری، فراداده، برابری زبانها، پیوندها، import عمومی و خروجی ثبتشده نمونههای اجرایی را میسنجد؛ نمونه مرورگر بستهبندی میشود اما بررسی کامل رفتار آن به UI زنده نیاز دارد. دستور npm run smoke:pack مصرفکننده فایل بسته تازه و CLI Pagefind را بررسی میکند.
فایلها قرارداد منبع وبسایت را میگذرانند، اما اتصال فعلی پیشنمایش دو مانع جدا دارد: docs:local نام مخزن را به صورت پیشفرض abzar-php میگیرد و fa-search-kit در فهرست مستندات و فهرست همگامسازی نیست. فراخوانی prepareLocalDocs(sourceRoot, "fa-search-kit", output) اکنون با خطای «Repository is not in the website catalog» رد میشود. وجود در فهرست محصول بهتنهایی کافی نیست.
وبسایت باید این مخزن را به اتصال مستندات اضافه کند و نام صریح مخزن را بپذیرد تا مسیر معمول پیشنمایش این صفحهها را درست نمایش دهد. این تغییرها بیرون از این مخزن هستند. گردآورنده منبع و بازنویس پیوند همچنان میتوانند مستندات را بدون نوشتن در وبسایت بررسی کنند. پس از آماده شدن اتصال وبسایت، بازبینی محلی از نسخه منتشرنشده استفاده میکند؛ دریافت عمومی همچنان به انتشار GitHub نیاز دارد. ساخت عادی هیچگاه این ویرایشهای محلی را دریافت نمیکند.