如何从HTML文件中提取元标记并在SOLR和TIKA中对它们进行索引
我试图提取HTML文件的元标记,并通过tika集成将它们索引到solr中。我无法使用Tika提取这些元标记,也无法在solr中显示 我的HTML文件如下所示如何从HTML文件中提取元标记并在SOLR和TIKA中对它们进行索引,solr,apache-tika,data-import,solr4,Solr,Apache Tika,Data Import,Solr4,我试图提取HTML文件的元标记,并通过tika集成将它们索引到solr中。我无法使用Tika提取这些元标记,也无法在solr中显示 我的HTML文件如下所示 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="product_id" content="11"/> <meta name="assetid" content="10001"/> <met
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="product_id" content="11"/>
<meta name="assetid" content="10001"/>
<meta name="title" content="title of the article"/>
<meta name="type" content="0xyzb"/>
<meta name="category" content="article category"/>
<meta name="first" content="details of the article"/>
<h4>title of the article</h4>
<p class="link"><a href="#link">How cite the Article</a></p>
<p class="list">
<span class="listterm">Length: </span>13 to 15 feet<br>
<span class="listterm">Height to Top of Head: </span>up to 18 feet<br>
<span class="listterm">Weight: </span>1,200 to 4,300 pounds<br>
<span class="listterm">Diet: </span>leaves and branches of trees<br>
<span class="listterm">Number of Young: </span>1<br>
<span class="listterm">Home: </span>Sahara<br>
</p>
</p>
文章标题
长度:13至15英尺
到头顶的高度:高达18英尺
重量:1200至4300磅
饮食:树叶和树枝
年轻人数量:1
家:撒哈拉
我的data-config.xml文件如下所示
<dataConfig>
<dataSource name="bin" type="BinFileDataSource" />
<document>
<entity name="f" dataSource="null" rootEntity="false"
processor="FileListEntityProcessor"
baseDir="/path/to/html/files/"
fileName=".*html|xml" onError="skip"
recursive="false">
<field column="fileAbsolutePath" name="path" />
<field column="fileSize" name="size"/>
<field column="file" name="filename"/>
<entity name="tika-test" dataSource="bin" processor="TikaEntityProcessor"
url="${f.fileAbsolutePath}" format="text" onError="skip">
<field column="product_id" name="product_id" meta="true"/>
<field column="assetid" name="assetid" meta="true"/>
<field column="title" name="title" meta="true"/>
<field column="type" name="type" meta="true"/>
<field column="first" name="first" meta="true"/>
<field column="category" name="category" meta="true"/>
</entity>
</entity>
</document>
</dataConfig>
在schema.xml文件中,我添加了以下字段
<field name="product_id" type="string" indexed="true" stored="true"/>
<field name="assetid" type="string" indexed="true" stored="true" />
<field name="title" type="string" indexed="true" stored="true"/>
<field name="type" type="string" indexed="true" stored="true"/>
<field name="category" type="string" indexed="true" stored="true"/>
<field name="first" type="text_general" indexed="true" stored="true"/>
在我的solrconfig.xml文件中,我添加了以下代码
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler" />
<lst name="defaults">
<str name="config">/path/to/data-config.xml</str>
</lst>
/path/to/data-config.xml
有人知道如何从HTML文件中提取这些元标记,并在solr和Tika中为它们编制索引吗?您的帮助将不胜感激。我认为meta=“true”并不是您所认为的意思。它通常指的是有关文件的内容,而不是内容。因此,内容类型等可能也会映射到http equiv
除此之外,还需要提取实际内容。您可以使用format=“xml”,然后使用xpathenticyprocessor放置一个内部实体,然后映射路径。除此之外,即使这样,您也会受到限制,因为在AFAIK中,DIH使用DefaultHtmlMapper,这在它允许的内容中是非常严格的,并且会跳过大多数“class”和“id”属性,甚至像“div”这样的东西。您可以在源代码中自己阅读
坦率地说,你更容易的方法是拥有一个SolrJ客户,自己管理Tika。然后您可以将其设置为使用identityhtmlapper,它不会影响HTML。您使用的是哪个版本的Solr?如果您使用的是或更高版本,则会嵌入其中。Tika使用solrconfig.xml中配置的“solr-Cells”“ExtractingRequestHandler”类和solr通信,如下所示:
<!-- Solr Cell Update Request Handler
http://wiki.apache.org/solr/ExtractingRequestHandler
-->
<requestHandler name="/update/extract"
startup="lazy"
class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="lowernames">true</str>
<str name="uprefix">ignored_</str>
<!-- capture link hrefs but ignore div attributes -->
<str name="captureAttr">true</str>
<str name="fmap.a">links</str>
<str name="fmap.div">ignored_</str>
</lst>
</requestHandler>
<!-- some trie-coded dynamic fields for faster range queries -->
<dynamicField name="*_ti" type="tint" indexed="true" stored="true"/>
<dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/>
<dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/>
<dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/>
<dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/>
<dynamicField name="*_pi" type="pint" indexed="true" stored="true"/>
<dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
<dynamicField name="ignored_*" type="ignored" multiValued="true"/>
<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="random_*" type="random" />
<!-- uncomment the following to ignore any fields that don't already match an existing
field name or dynamic field, rather than reporting them as an error.
alternately, change the type="ignored" to some other type e.g. "text" if you want
unknown fields indexed and/or stored by default -->
<!--dynamicField name="*" type="ignored" multiValued="true" /-->
</fields>
真的
忽略_
真的
链接
忽略_
现在,在solr中,正如您在上述配置中所看到的,默认情况下,从HTML文档中提取的、未在schema.xml中声明的任何字段都以“忽略的”作为前缀,即它们被映射到schema.xml中的“忽略的”*“动态字段。默认的schema.xml如下所示:
<!-- Solr Cell Update Request Handler
http://wiki.apache.org/solr/ExtractingRequestHandler
-->
<requestHandler name="/update/extract"
startup="lazy"
class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="lowernames">true</str>
<str name="uprefix">ignored_</str>
<!-- capture link hrefs but ignore div attributes -->
<str name="captureAttr">true</str>
<str name="fmap.a">links</str>
<str name="fmap.div">ignored_</str>
</lst>
</requestHandler>
<!-- some trie-coded dynamic fields for faster range queries -->
<dynamicField name="*_ti" type="tint" indexed="true" stored="true"/>
<dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/>
<dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/>
<dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/>
<dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/>
<dynamicField name="*_pi" type="pint" indexed="true" stored="true"/>
<dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
<dynamicField name="ignored_*" type="ignored" multiValued="true"/>
<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="random_*" type="random" />
<!-- uncomment the following to ignore any fields that don't already match an existing
field name or dynamic field, rather than reporting them as an error.
alternately, change the type="ignored" to some other type e.g. "text" if you want
unknown fields indexed and/or stored by default -->
<!--dynamicField name="*" type="ignored" multiValued="true" /-->
</fields>
下面是如何处理'ignored'类型:
<!-- since fields of this type are by default not stored or indexed,
any data added to them will be ignored outright. -->
<fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
因此,tika提取的元数据默认由Solr单元放在“忽略”字段中,这就是为什么在索引和存储时忽略它们的原因。
因此,要对元数据进行索引和存储,您可以更改已知元数据的“uprefix=attr_”或“创建特定字段或动态字段”,并根据需要对其进行处理
下面是更正后的solrconfig.xml:
<!-- Solr Cell Update Request Handler
http://wiki.apache.org/solr/ExtractingRequestHandler
-->
<requestHandler name="/update/extract"
startup="lazy"
class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="lowernames">true</str>
<str name="uprefix">attr_</str>
<!-- capture link hrefs but ignore div attributes -->
<str name="captureAttr">true</str>
<str name="fmap.a">links</str>
<str name="fmap.div">ignored_</str>
</lst>
</requestHandler>
真的
属性_
真的
链接
忽略_
虽然是一个老问题,但我的回答是
简而言之,我现在删除的StackOverflow问题是“提取自定义(例如,谢谢你的建议。我想SolrJ客户端是用于java应用程序的。我的应用程序是PHP,我使用的是SolPHP客户端。我可以用SolPHP做些什么吗?Tika是java的,我不确定你是否可以只通过配置来设置映射器。但是如果把Tika全部跳过,然后从P解析HTML,可能会更容易一些。)请详细说明solrJ的工作原理以及如何与现有Solr集成?