在Solr

时间:2017-02-26 03:50:14

标签: html xml solr

我试图搜索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>

但成效有限。 A&#34;内容&#34;字段现在出现在响应中,它包含的内容似乎是初始文档的剥离不良和格式错误的版本。突出显示似乎有效,但它不干净。

所以我需要Solr做的是:

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

似乎无论我改变什么(除了上面的Tika),&#34; content1&#34;被忽略了。

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

1 个答案:

答案 0 :(得分:0)

我无法完成这项工作,Tika也无法正确删除HTML,所以我通过使用Solarium用于Solr和PHPQuery的PHP客户端来解析,剥离,提取数据,然后形成我自己的文档直接发布到Solr。

问题是 solrconfig.xml 中定义的ERH(ExtractRequestHandler),它强制使用Tika。通过使用Solarium,ERH被绕过,因此我在托管架构中定义的所有字段都开始被/ update请求处理程序使用。