我该怎么办索引中SOLR .html文件

问题描述 投票:5回答:4

我想这样做索引的文件存储在服务器(我并不需要抓取)上。 /路径/到/文件/样本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>

我的数据-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
4个回答
4
投票

您可以使用Solr Extracting Request Handler从HTML文件与HTML文件养活的Solr并提取内容。例如在link

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

Nutch的使用Solr是一个更广泛的解决方案,如果您要抓取的网站,并将它编入索引。 Nutch with Solr Tutorial将让你开始。


0
投票

您的意思是有文件名=“* HTML”中的数据-config.xml中?现在你有文件名=“* HTML”

我很肯定的Solr怎么会不知道你的元字段从HTML转换成索引字段。我还没有试过。

我已创建的程序但是阅读(X)HTML(使用XPath)。这将创建一个XML格式的文件发送到\更新。此时,你应该能够使用dataimporthandler寻找那些格式化的XML文件(S)。


0
投票

这是一个完整的示例将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"));
    }
}

-1
投票

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

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

更多信息是here

© www.soinside.com 2019 - 2024. All rights reserved.