使用solr / lucene索引原始HTML内容

时间:2014-04-21 18:15:21

标签: hadoop solr lucene bigdata

我有一些htmls,我在同一网站的不同时间段内从网上抓下来。并且原始数据看起来像这样

timestamp, htmlcontent(500KB)
..

我编写了一个解析器,用于解析HTML中的一些有趣字段,并尝试根据我解析出的字段构建搜索引擎。不仅仅基于HTML的原始文本,而是原始的完整HTML内容>

现在我的数据如下:

timestamp, htmlcontent, parsedfield1, parsedfield2

我希望用户搜索时间戳,parsedfield1或parsedfield2,我的搜索引擎返回与用户查询匹配的原始HTML并填充浏览器......所以感觉就像搜索引擎时间机器:)) p>

在这种情况下,我想知道我该如何设计索引?我应该存储哪些字段,哪些不存储。我正在关注这本书" Lucene in Action"并且想知道任何人都可以帮我解决这个问题。

根据我对Index的理解,schema.xml中有一些属性...索引与否?是否存储?....我假设,"无论您想要包含在查询结果中,都应该存储它。 " ..在这种情况下,我必须存储包含原始HTML的列...

由于该列太大,一条记录通常大约有几百KB ......只有几百行..你可以很容易地得到一个近1GB的数据集...这在solr和我的工作中都没有用我试图使用Lucene索引这些列,并且它遇到了堆积问题..

这是另一个想法: 也许我应该存储parsedfield1,parsedfield2和pointer ...其中point列是原始HTML文件的绝对路径。当然,在这种情况下,我需要将每个html存储在本地/或HDFS上的单独文件中......所以当用户搜索parsedfield1时,它将返回绝对路径,然后我去检索这些文件...

我想我正在尽可能清楚地描述这个问题,并且想知道任何人都可以花一分钟时间给我一些方向指导......

非常感谢!

1 个答案:

答案 0 :(得分:0)

一些指南 1.您需要XML或CSV或JSON格式的数据,我将为您提供xml的示例  例如.-->您的数据采用xml格式

<add>
    <doc>
        <field name="id">01</field>
        <field name="timestamp">somevalue</field>
        <field name="parsedfield1">your data 1</field>
        <field name="parsedfield2">Java data </field>
        <field name="htmlcontent">link to that html file</field>
    </doc>
</add>

2。您需要修改schema.xml

- 每个文件应该有一个唯一的ID
- 根据您的需要,您只需存储htmlcontent的路径
- 仅用于搜索的其他字段索引

 <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
 <field name="timestamp" type="text_general" indexed="true" stored="false" />
 <field name="parsedfield1" type="text_general" indexed="true" stored="false"/>
 <field name="parsedfield2" type="text_general" indexed="true" stored="false" />
 <field name="parsedfield2" type="text_general" indexed="true" stored="false" />
 <field name="htmlcontent" type="text_general" indexed="true"  stored="true" />


3。您可以使用post.jar将所有XML文件发布到solr,或者如果需要以编程方式使用SOLRJ API


**要存储或不存储的字段**
除非要在结果

中显示,否则您要执行的字段只需搜索不需要存储