StormCrawler爬取内网时自定义Meta标签未写入Elasticsearch的问题求助
问题与配置详情
我使用StormCrawler(v2.10)爬取内网网站,将数据存储至Elasticsearch(v7.8.0)并通过Kibana可视化。内网页面包含以下自定义Meta标签:
<meta name="Article_PublishedDate" content="2023-07-14T00:00:00Z" /> <meta name="Article_Year" content="2023" /> <meta name="Article_Heading" content="AWARDS RELEASE 2023" /> <meta name="Article_Description" content="BUSINESS AWARDS RELEASE 2023" /> <meta name="Article_Type" content="PressRelease" />
我希望将这些标签存入名为crawler-content的Elasticsearch索引,但在Kibana/Elasticsearch中无法找到这些字段。已做的配置如下:
更新后的索引脚本
{ "settings": { "index": { "number_of_shards": 5, "number_of_replicas": 1, "refresh_interval": "5s", "default_pipeline": "timestamp" } }, "mappings": { "_source": { "enabled": true }, "properties": { "content": { "type": "text" }, "description": { "type": "text" }, "domain": { "type": "keyword" }, "format": { "type": "keyword" }, "keywords": { "type": "keyword" }, "host": { "type": "keyword" }, "title": { "type": "text" }, "url": { "type": "keyword" }, "timestamp": { "type": "date", "format": "date_optional_time" }, "metatag": { "properties": { "article_description": { "type": "text" }, "article_heading": { "type": "text" }, "article_publisheddate": { "type": "date" }, "article_type": { "type": "text" }, "article_year": { "type": "text" } } } } } }
jsoupfilters.json中添加的配置
"parse.article_description": "//META[@name=\"Article_Description\"]/@content", "parse.article_heading": "//META[@name=\"Article_Heading\"]/@content", "parse.article_publisheddate": "//META[@name=\"Article_PublishedDate\"]/@content", "parse.article_type": "//META[@name=\"Article_Type\"]/@content", "parse.article_year": "//META[@name=\"Article_Year\"]/@content"
crawler-conf.yaml中添加的配置
indexer.md.mapping: - parse.title=title - parse.search=search - parse.keywords=keywords - parse.description=description - parse.article_description=metatag.article_description - parse.article_heading=metatag.article_heading - parse.article_publisheddate=metatag.article_publisheddate - parse.article_type=metatag.article_type - parse.article_year=metatag.article_year - domain - format
排查与解决步骤
确认索引映射生效状态
- 调用Elasticsearch API检查索引实际映射:
GET crawler-content/_mapping,查看metatag下的子字段是否存在。 - 若索引在修改映射前已创建,需重新创建索引或更新映射(ES无法直接修改已有字段类型,新增字段可动态更新),且需重新爬取数据,旧数据不会自动同步新映射。
- 调用Elasticsearch API检查索引实际映射:
验证jsoup过滤器提取结果
- 查看StormCrawler解析阶段的日志,确认
parse.article_description等字段是否被正确提取。 - 用jsoup单独测试XPath表达式,确保能精准获取对应Meta标签的content值(当前XPath写法无大小写问题,HTML标签/属性不区分大小写)。
- 查看StormCrawler解析阶段的日志,确认
检查indexer映射配置加载情况
- 查看StormCrawler启动日志,确认
indexer.md.mapping配置无加载错误。 - 核对映射键值对:确保
parse.xxx与目标字段metatag.xxx的命名完全匹配(当前配置的小写命名与索引映射一致,无问题)。
- 查看StormCrawler启动日志,确认
验证文档索引内容
- 调用ES API查询已爬取文档:
GET crawler-content/_search,查看_source中是否包含metatag字段及其子字段。若缺失,说明索引阶段未正确写入数据,需排查indexer逻辑。
- 调用ES API查询已爬取文档:
日期字段格式校验
article_publisheddate为date类型,需确保提取的日期格式(如2023-07-14T00:00:00Z)符合ES date格式要求。若格式错误,ES会拒绝写入或字段值为null,需查看日志中的日期解析错误信息。
内容的提问来源于stack exchange,提问作者MarioCB
相关产品推荐
相关产品推荐

