【问题标题】:How can I do indexing .html files in SOLR如何在 SOLR 中索引 .html 文件
【发布时间】:2013-01-20 14:37:04
【问题描述】:

我要索引的文件存储在服务器上(我不需要爬)。 /路径/到/文件/ 示例 HTML 文件是

<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>

我在 solrconfing.xml 文件中添加了请求处理程序。

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
  <str name="config">/path/to/data-config.xml</str>
</lst>

我的 data-config.xml 是这样的

<dataConfig>
<dataSource type="FileDataSource" />
<document>
    <entity name="f" processor="FileListEntityProcessor" baseDir="/path/to html/files/" fileName=".*html" recursive="true" rootEntity="false" dataSource="null">
        <field column="plainText" name="text"/>
    </entity>
</document>
</dataConfig>

我保留了默认的 schema.xml 文件,并将以下代码添加到 schema.xml 文件中。

 <field name="product_id" type="string" indexed="true" stored="true"/>
 <field name="assetid" type="string" indexed="true" stored="true" required="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"/>

 <uniqueKey>assetid</uniqueKey>

当我在设置后尝试进行完全导入时,它显示所有 html 文件都已获取。但是当我在 SOLR 中搜索时,它没有显示任何结果。有人知道可能是什么原因吗?

我的理解是所有文件都正确提取但未在 SOLR 中编制索引。有谁知道如何在 SOLR 中索引 HTML 文件的元标记和内容?

您的回复将不胜感激。

【问题讨论】:

    标签: solr full-text-indexing dataimporthandler data-import solr4


    【解决方案1】:

    您的意思是在 data-config.xml 中包含 fileName="*.html" 吗?你现在有了 fileName=".*html"

    我很确定 Solr 不会知道如何将您的元字段从您的 html 转换为索引字段。我没试过。

    但是,我已经创建了读取 (x)html 的程序(使用 xpath)。这将创建一个格式化的 xml 文件以发送到 \update。此时,您应该可以使用 dataimporthandler 来查找格式化的 xml 文件。

    【讨论】:

    • 您的评论对我来说不是很清楚。您能否详细说明您是如何创建该程序的以及如何创建 XML 以及如何将其链接到 SOLR?
    • 当然。该程序可以是一个 c# 或 Java 程序,用于读取您的 HTML 文件并从它们的 Meta 字段构建一个格式化的 xml 文件或文件。然后将 dataimporthandler 指向这些格式正确的 xml 文件以更新索引。这有帮助吗?
    • 哦,这意味着我必须编写一个外部程序,最初我必须将所有文件提供给该程序,这将生成相关的 xml 文件,然后 SOLR 能够进行索引。我想要一些自动化和快速的东西,因为我有几个 TB(兆字节)的文件。所以最好有自动化流程。
    • 你提到不想爬取 html 文件,这对nutch.apache.org 来说很容易我想我会使用 nutch 来爬取 html 文件,或者我会编写一个程序来读取html 文件并更新索引。我根本不会使用 dataimporthandler
    • 你知道如何用 SOLR 配置 nutch apache 吗?我试过nutch一次,但没有成功。 nutch 的文档不是很清楚。如果你知道那么你能帮我设置和配置吗?
    【解决方案2】:

    您可以使用Solr Extracting Request Handler 向 Solr 提供 HTML 文件并从 html 文件中提取内容。例如在link

    Solr 使用Apache Tikauploaded html file 中提取内容

    如果您想抓取网站并将其编入索引,Nutch with Solr 是一种更广泛的解决方案。
    Nutch with Solr Tutorial 将帮助您入门。

    【讨论】:

    • 我对 TIKA 配置更感兴趣。但是在文档中他们使用了 CURL 命令。我不想使用 CURL 我想要一些自动化的过程。你有任何关于 TIKA 和 SOLR 的工作示例吗?它会更清晰,更有帮助。
    • 卷曲只是举例。您可以使用 Solrj 之类的客户端来检查您的文件夹并将更改推送到 Solr。您可以安排一个工作来做同样的事情。 Tika 充当包装器以对文件进行识别并使用库对其进行解析。您无需进行任何更改。
    • 我已经发布了另一个关于 Tika1.2 和 solr4 配置的问题。Question 你能看看那里,告诉我我在做什么错吗?
    【解决方案3】:

    最简单的方法是使用 bin 目录下的post 工具。它会自动完成所有工作。这是示例

    ./post -c conf1 /path/to/files/*

    更多信息是here

    【讨论】:

      【解决方案4】:

      这是一个将 HTML 转换为文本并提取相关元数据的完整示例:

      import static org.junit.Assert.assertEquals;
      import static org.junit.Assert.assertNull;
      
      import org.apache.tika.metadata.Metadata;
      import org.apache.tika.parser.AutoDetectParser;
      import org.apache.tika.parser.ParseContext;
      import org.apache.tika.sax.BodyContentHandler;
      import org.junit.Test;
      
      import java.io.ByteArrayInputStream;
      
      public class ConversionTest {
      
          @Test
          public void testHtmlToTextConversion() throws Exception {
              ByteArrayInputStream bais = new ByteArrayInputStream(("<html>\n" +
                  "<head>\n" +
                  "<title> \n" +
                  " A Simple HTML Document\n" +
                  "</title>\n" +
                  "</head>\n" +
                  "<body></div>\n" +
                  "<p>This is a very simple HTML document</p>\n" +
                  "<p>It only has two paragraphs</p>\n" +
                  "</body>\n" +
                  "</html>").getBytes());
              BodyContentHandler contenthandler = new BodyContentHandler();
              Metadata metadata = new Metadata();
              AutoDetectParser parser = new AutoDetectParser();
              parser.parse(bais, contenthandler, metadata, new ParseContext());
              assertEquals("\nThis is a very simple HTML document\n" + 
                  "\n" + 
                  "It only has two paragraphs\n" + 
                  "\n", contenthandler.toString().replace("\r", ""));
              assertEquals("A Simple HTML Document", metadata.get("title"));
              assertEquals("A Simple HTML Document", metadata.get("dc:title"));
              assertNull(metadata.get("title2"));
              assertEquals("org.apache.tika.parser.DefaultParser", metadata.getValues("X-Parsed-By")[0]);
              assertEquals("org.apache.tika.parser.html.HtmlParser", metadata.getValues("X-Parsed-By")[1]);
              assertEquals("ISO-8859-1", metadata.get("Content-Encoding"));
              assertEquals("text/html; charset=ISO-8859-1", metadata.get("Content-Type"));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-22
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        • 2014-12-16
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        相关资源
        最近更新 更多