优化搜索的筛选逻辑
This commit is contained in:
@@ -7,7 +7,6 @@ export default defineConfig({
|
|||||||
title: "我的世界中国版 ModSDK",
|
title: "我的世界中国版 ModSDK",
|
||||||
description: "我的世界中国版 ModSDK Wiki 镜像",
|
description: "我的世界中国版 ModSDK Wiki 镜像",
|
||||||
ignoreDeadLinks: true,
|
ignoreDeadLinks: true,
|
||||||
cleanUrls: false,
|
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
// https://vitepress.dev/reference/default-theme-config
|
// https://vitepress.dev/reference/default-theme-config
|
||||||
nav: [
|
nav: [
|
||||||
@@ -28,7 +27,11 @@ export default defineConfig({
|
|||||||
options: {
|
options: {
|
||||||
appId: 'F8HD84CUON',
|
appId: 'F8HD84CUON',
|
||||||
apiKey: 'ccaf9255472c593d8a8b0724a940bb29',
|
apiKey: 'ccaf9255472c593d8a8b0724a940bb29',
|
||||||
indexName: 'netease-modsdk'
|
indexName: 'netease-modsdk',
|
||||||
|
searchParameters: {
|
||||||
|
// 筛选掉 rootType 为 mconline 的项目
|
||||||
|
facetFilters: ['rootType:-mconline']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ async function getAllMarkdownFiles(dir, base = '') {
|
|||||||
} else if (entry.name.endsWith('.md')) {
|
} else if (entry.name.endsWith('.md')) {
|
||||||
// 忽略以 _ 开头的特殊文件
|
// 忽略以 _ 开头的特殊文件
|
||||||
if (entry.name.startsWith('_') || entry.name.includes('索引')) {
|
if (entry.name.startsWith('_') || entry.name.includes('索引')) {
|
||||||
console.log(entry.name);
|
// console.log(entry.name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 构建路由路径
|
// 构建路由路径
|
||||||
@@ -218,6 +218,17 @@ function getDirectoryPriority(path) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取目录的优先级
|
||||||
|
* mcdocs - 最高优先级
|
||||||
|
* mcguide - 中等优先级
|
||||||
|
* mconline - 最低优先级
|
||||||
|
*/
|
||||||
|
function getDirectoryRootType(path) {
|
||||||
|
const firstDir = path.split('/').filter(Boolean)[0];
|
||||||
|
return firstDir;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成符合VitePress的Algolia索引记录
|
* 生成符合VitePress的Algolia索引记录
|
||||||
*/
|
*/
|
||||||
@@ -230,10 +241,17 @@ async function generateAlgoliaRecords() {
|
|||||||
try {
|
try {
|
||||||
const rawContent = await readFile(page.filePath, 'utf8');
|
const rawContent = await readFile(page.filePath, 'utf8');
|
||||||
const { data: frontmatter, content } = matter(rawContent);
|
const { data: frontmatter, content } = matter(rawContent);
|
||||||
const pageTitle = frontmatter.title || page.path.split('/').pop() || page.path;
|
const pageTitle = page.path
|
||||||
|
.replaceAll("/mcdocs", "API文档")
|
||||||
|
.replaceAll("/mcguide", "开发指南")
|
||||||
|
.replaceAll("/mconline", "教学课程")
|
||||||
|
.split('/')
|
||||||
|
.map(s => s.split("-").pop())
|
||||||
|
.join("/");
|
||||||
|
|
||||||
// 确定这个页面的优先级
|
// 确定这个页面的优先级
|
||||||
const priority = getDirectoryPriority(page.path);
|
const priority = getDirectoryPriority(page.path);
|
||||||
|
const rootType = getDirectoryRootType(page.path);
|
||||||
|
|
||||||
// 按标题分割内容
|
// 按标题分割内容
|
||||||
const sections = splitByHeadings(content);
|
const sections = splitByHeadings(content);
|
||||||
@@ -266,7 +284,8 @@ async function generateAlgoliaRecords() {
|
|||||||
content: cleanedContent,
|
content: cleanedContent,
|
||||||
_tags: ['zh-CN'],
|
_tags: ['zh-CN'],
|
||||||
lang: "zh-CN",
|
lang: "zh-CN",
|
||||||
priority: priority // 添加优先级字段
|
priority: priority, // 添加优先级字段
|
||||||
|
rootType: rootType
|
||||||
};
|
};
|
||||||
|
|
||||||
// 如果记录太大,则需要分割
|
// 如果记录太大,则需要分割
|
||||||
@@ -274,7 +293,7 @@ async function generateAlgoliaRecords() {
|
|||||||
if (recordSize <= MAX_RECORD_SIZE) {
|
if (recordSize <= MAX_RECORD_SIZE) {
|
||||||
records.push(record);
|
records.push(record);
|
||||||
} else {
|
} else {
|
||||||
console.log(`部分内容过大,需要进一步分割: ${objectID}`);
|
// console.log(`部分内容过大,需要进一步分割: ${objectID}`);
|
||||||
|
|
||||||
// 按段落分割大内容
|
// 按段落分割大内容
|
||||||
const paragraphs = cleanedContent.split(/\n\s*\n/);
|
const paragraphs = cleanedContent.split(/\n\s*\n/);
|
||||||
@@ -404,16 +423,17 @@ async function settingAlgolia() {
|
|||||||
const response = await client.setSettings({
|
const response = await client.setSettings({
|
||||||
indexName: INDEX_NAME,
|
indexName: INDEX_NAME,
|
||||||
indexSettings: {
|
indexSettings: {
|
||||||
attributesForFaceting: ['lang', 'type'],
|
attributesForFaceting: ['lang', 'type', 'rootType'],
|
||||||
attributesToHighlight: ['hierarchy.lvl0', 'hierarchy.lvl1', 'hierarchy.lvl2', 'content'],
|
attributesToHighlight: ['hierarchy.lvl0', 'hierarchy.lvl1', 'hierarchy.lvl2', 'content'],
|
||||||
attributesToSnippet: ['content:20'],
|
attributesToSnippet: ['content:50'],
|
||||||
attributesToRetrieve: ['hierarchy', 'content', 'type', 'url', 'lang', 'priority'],
|
attributesToRetrieve: ['hierarchy', 'content', 'type', 'url', 'lang', 'priority', 'rootType'],
|
||||||
searchableAttributes: [
|
searchableAttributes: [
|
||||||
'hierarchy.lvl0',
|
'hierarchy.lvl0',
|
||||||
'hierarchy.lvl1',
|
'hierarchy.lvl1',
|
||||||
'hierarchy.lvl2',
|
'hierarchy.lvl2',
|
||||||
'content'
|
'content'
|
||||||
],
|
],
|
||||||
|
// 已经在网页上设置了,这边设置会重复
|
||||||
customRanking: [
|
customRanking: [
|
||||||
'desc(priority)', // 首先按优先级降序排列(值越高排越前)
|
'desc(priority)', // 首先按优先级降序排列(值越高排越前)
|
||||||
'asc(content.length)' // 其次按内容长度升序(简短内容优先)
|
'asc(content.length)' // 其次按内容长度升序(简短内容优先)
|
||||||
|
|||||||
Reference in New Issue
Block a user