我有一些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时,它将返回绝对路径,然后我去检索这些文件...
我想我正在尽可能清楚地描述这个问题,并且想知道任何人都可以花一分钟时间给我一些方向指导......
非常感谢!
答案 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
**要存储或不存储的字段**
除非要在结果