You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
排查与解决步骤
  1. 确认索引映射生效状态

    • 调用Elasticsearch API检查索引实际映射:GET crawler-content/_mapping,查看metatag下的子字段是否存在。
    • 若索引在修改映射前已创建,需重新创建索引或更新映射(ES无法直接修改已有字段类型,新增字段可动态更新),且需重新爬取数据,旧数据不会自动同步新映射。
  2. 验证jsoup过滤器提取结果

    • 查看StormCrawler解析阶段的日志,确认parse.article_description等字段是否被正确提取。
    • 用jsoup单独测试XPath表达式,确保能精准获取对应Meta标签的content值(当前XPath写法无大小写问题,HTML标签/属性不区分大小写)。
  3. 检查indexer映射配置加载情况

    • 查看StormCrawler启动日志,确认indexer.md.mapping配置无加载错误。
    • 核对映射键值对:确保parse.xxx与目标字段metatag.xxx的命名完全匹配(当前配置的小写命名与索引映射一致,无问题)。
  4. 验证文档索引内容

    • 调用ES API查询已爬取文档:GET crawler-content/_search,查看_source中是否包含metatag字段及其子字段。若缺失,说明索引阶段未正确写入数据,需排查indexer逻辑。
  5. 日期字段格式校验

    • article_publisheddate为date类型,需确保提取的日期格式(如2023-07-14T00:00:00Z)符合ES date格式要求。若格式错误,ES会拒绝写入或字段值为null,需查看日志中的日期解析错误信息。

内容的提问来源于stack exchange,提问作者MarioCB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:37:04