配置文件
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
DocSearch配置文件示例如下:
{
"index_name": "example",
"start_urls": ["https://www.example.com/docs"],
"selectors": {
"lvl0": "#content header h1",
"lvl1": "#content article h1",
"lvl2": "#content section h3",
"lvl3": "#content section h4",
"lvl4": "#content section h5",
"lvl5": "#content section h6",
"text": "#content header p,#content section p,#content section ol"
}
}
index_name
这是Algolia索引名称,您的记录将被推送至此。我们提供的apiKey仅限该索引使用,且是仅搜索API密钥。
使用免费版DocSearch爬虫时,indexName始终是配置文件名。若自行运行DocSearch,可任意命名。
{
"index_name": "example"
}
DocSearch爬虫运行时,会创建临时索引。爬取完成后,将该索引移至index_name指定名称(覆盖现有索引)。
默认临时索引名称为index_name值 + _tmp。
如需自定义名称,请设置INDEX_NAME_TMP环境变量。此变量可在.env文件中配置,与APPLICATION_ID和API_KEY并列。
start_urls
此数组包含网站爬取起始URL列表。爬虫将从这些页面递归跟踪所有链接(<a>标签),但不会跟踪跨域链接及匹配stop_urls的链接。
{
"start_urls": ["https://www.example.com/docs"]
}
selectors_key:定制选择器
可根据URL定义更精细的选择器集。需在start_urls中使用selectors_key参数。
{
"start_urls": [
{
"url": "http://www.example.com/docs/faq/",
"selectors_key": "faq"
},
{
"url": "http://www.example.com/docs/"
}
],
[…],
"selectors": {
"default": {
"lvl0": ".docs h1",
"lvl1": ".docs h2",
"lvl2": ".docs h3",
"lvl3": ".docs h4",
"lvl4": ".docs h5",
"text": ".docs p, .docs li"
},
"faq": {
"lvl0": ".faq h1",
"lvl1": ".faq h2",
"lvl2": ".faq h3",
"lvl3": ".faq h4",
"lvl4": ".faq h5",
"text": ".faq p, .faq li"
}
}
}
爬虫遍历start_urls项匹配URL,仅应用首个匹配项的选择器子集。
假设URL为http://www.example.com/en/api/,配置如下:
{
"start_urls": [
{
"url": "http://www.example.com/doc/",
"selectors_key": "doc"
},
{
"url": "http://www.example.com/doc/faq/",
"selectors_key": "faq"
},
[…],
]
}
仅与doc相关的选择器集将应用于该URL。正确配置方式应反向构建(如先前所述)。
若start_urls项未定义selectors_key,则使用default选择器集。请务必设置此回退选择器集。
使用正则表达式
start_urls和stop_urls支持正则表达式实现复杂匹配模式。可定义为正则表达式数组或对象,对象必须包含指向可访问页面的url键。
若以对象形式定义正则表达式,可添加variables键注入特定URL模式变量。下例阐明此特性:
{
"start_urls": [
{
"url": "http://www.example.com/docs/(?P<lang>.*?)/(?P<version>.*?)/",
"variables": {
"lang": ["en", "fr"],
"version": ["latest", "3.3", "3.2"]
}
}
]
}
此语法的附加效果是:从http://www.example.com/docs/en/latest匹配页面提取的所有记录将包含属性lang: en和version: latest,便于通过这些facetFilters筛选。
下例展示UI如何筛选特定语言和版本的结果。
docsearch({
[…],
algoliaOptions: {
'facetFilters': ["lang:en", "version:latest"]
},
[…],
});
使用自定义标签
无需正则表达式即可为特定页面添加自定义标签。在tags键中添加标签列表,这些标签将自动成为Algolia中的分面,支持按值筛选。
{
"start_urls": [
{
"url": "http://www.example.com/docs/concepts/",
"tags": ["concepts", "terminology"]
}
]
}
JS代码片段示例:
docsearch({
[…],
algoliaOptions: {
'facetFilters': ["tags:concepts"]
},
});
使用页面权重
用于提升特定页面优先级。此参数可增强页面生成的记录权重,高page_rank页面结果将优先于低page_rank页面。注意可传递任意数值(包括负值)。
{
"start_urls": [
{
"url": "http://www.example.com/docs/concepts/",
"page_rank": 5
},
{
"url": "http://www.example.com/docs/contributors/",
"page_rank": 1
}
]
}
本例中,《概念》页面生成的记录将优先于《贡献者》页面结果。
按页面使用自定义选择器
如果您的网站标记在不同页面间差异巨大,无法使用通用选择器,可以通过命名空间方式组织选择器,并为特定页面指定应使用的选择器集合。
{
"start_urls": [
"http://www.example.com/docs/",
{
"url": "http://www.example.com/docs/concepts/",
"selectors_key": "concepts"
},
{
"url": "http://www.example.com/docs/contributors/",
"selectors_key": "contributors"
}
],
"selectors": {
"default": {
"lvl0": ".main h1",
"lvl1": ".main h2",
"lvl2": ".main h3",
"lvl3": ".main h4",
"lvl4": ".main h5",
"text": ".main p"
},
"concepts": {
"lvl0": ".header h2",
"lvl1": ".main h1.title",
"lvl2": ".main h2.title",
"lvl3": ".main h3.title",
"lvl4": ".main h5.title",
"text": ".main p"
},
"contributors": {
"lvl0": ".main h1",
"lvl1": ".contributors .name",
"lvl2": ".contributors .title",
"text": ".contributors .description"
}
}
}
在此示例中,所有文档页面将使用selectors.default定义的选择器,而./concepts路径下的页面将使用selectors.concepts,./contributors路径下的页面则使用selectors.contributors。
selectors
此对象包含用于创建记录层级的所有CSS选择器,最多支持6个层级(lvl0、lvl1、lvl2、lvl3、lvl4、lvl5)以及text字段。
典型配置是将页面title或h1设为lvl0,h2设为lvl1,h3设为lvl2,p设为text,但这高度取决于具体标记结构。
text字段为必填项,但强烈建议同时设置lvl0、lvl1和lvl2以建立有效的相关性深度。
{
"selectors": {
"lvl0": "#content header h1",
"lvl1": "#content article h1",
"lvl2": "#content section h3",
"lvl3": "#content section h4",
"lvl4": "#content section h5",
"lvl5": "#content section h6",
"text": "#content header p,#content section p,#content section ol"
}
}
选择器可直接以字符串形式提供,也可作为包含selector键的对象。其他特殊键的设置方式如下文所述。
{
"selectors": {
"lvl0": {
"selector": "#content header h1"
}
}
}
使用全局选择器
默认的内容提取方式是按HTML标记自上而下读取。这种方式适用于半结构化内容(如标题层级),但当关键信息不在同一文档流中时(例如标题不在页眉或侧边栏内)将失效。
此时可将选择器设为全局(global),使其匹配整个页面,且该页提取的所有记录共享相同值。
{
"selectors": {
"lvl0": {
"selector": "#content header h1",
"global": true
}
}
}
不建议将text选择器设为全局。
设置默认值
当选择器未在页面上匹配到有效元素时,可通过default_value设置回退值。
{
"selectors": {
"lvl0": {
"selector": "#content header h1",
"default_value": "Documentation"
}
}
}