【问题标题】:Strip, store and index HTML files in Solr在 Solr 中剥离、存储和索引 HTML 文件
【发布时间】:2017-02-26 03:50:14
【问题描述】:

我正在尝试搜索一组 HTML 文件,并在 Solr 6.4.1 中提供摘录。由于突出显示需要返回清晰可读的文本,因此需要将 HTML 剥离为纯文本并存储。

但无论我在核心配置中进行什么更改,我指定的字段都不会在结果中返回,并且文档的突出显示始终为空 {}。

托管模式:

  <fieldType name="text_en_splitting_html" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
    <analyzer type="index">
      <charFilter class="solr.HTMLStripCharFilterFactory"/>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
      <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="1"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
      <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
      <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
      <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
  </fieldType>

  <field name="content1" type="text_en_splitting_html" multiValued="true" indexed="true" stored="true"/>

solrconfig.xml 是默认的,带有默认的 /update/extract requestHandler。我得到的回应是:

{
  "responseHeader":{
    "status":0,
    "QTime":4,
    "params":{
      "q":"*:*",
      "hl":"on",
      "indent":"on",
      "hl.fl":"content1",
      "wt":"json",
      "_":"1488077854581"}},
  "response":{"numFound":100,"start":0,"docs":[
      {
        "id":"/home/me/files/d1/test.html",
        "stream_size":[62963],
        "x_parsed_by":["org.apache.tika.parser.DefaultParser",
          "org.apache.tika.parser.html.HtmlParser"],
        "creator":["createhtml"],
        "stream_content_type":["text/html"],
        "viewport":["width=device-width, initial-scale=1"],
        "dc_title":["A nice read"],
        "content_encoding":["UTF-8"],
        "resourcename":["/home/me/files/d1/test.html"],
        "title":["A nice read"],
        "creator_url":["http://createhtml.net"],
        "content_type":["text/html; charset=UTF-8"],
        "_version_":1560362957551960064}
...
},
  "highlighting":{
    "/home/me/files/d1/test.html":{},
...

我正在索引

/opt/solr/bin/post -c mycollection -filetypes html files/

我也尝试过使用 Tika 提取处理程序

<requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
   <lst name="defaults">
      <str name="fmap.Last-Modified">last_modified</str>
    </lst>
</requestHandler>

但收效甚微。 “内容”字段现在出现在响应中,它包含似乎是原始文档的剥离和格式错误的版本。突出显示似乎有效,但并不干净。

所以我需要 Solr 做的是:

  • 完全清理我的 HTML(没有标签、类名或内联样式 - 就像 JavaScript 的 .text() 方法)
  • 对剥离的内容执行搜索
  • 如果我要求返回剥离的内容
  • 返回对剥离内容的突出显示

似乎无论我改变什么(除了上面的Tika),“content1”都会被忽略。

简单地说,我在这里要做的就是能够像任何其他搜索引擎一样搜索 HTML 文件并提供摘录。

【问题讨论】:

  • 你能在 Solr 服务器前端确定 content1 字段中是否有实际内容吗?如果是,您能否在查询中将 fl 参数与 content1 字段一起使用,这会改变结果吗?

标签: html xml solr


【解决方案1】:

我无法完成这项工作,而且 Tika 无法正确剥离 HTML,因此我通过使用 Solr 和 PHPQuery 的 Solarium PHP 客户端来解析、剥离、提取数据,然后形成我自己的文档以发布,从而解决了这个问题直接到 Solr。

问题在于solrconfig.xml 中定义的ERH (ExtractRequestHandler) 强制使用Tika。通过使用 Solarium,ERH 被绕过,所以我在 ma​​naged-schema 中定义的所有字段都开始被 /update 请求处理程序使用。

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 2018-04-26
    • 1970-01-01
    • 2013-01-20
    • 2016-05-22
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多