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

6qftjkof  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(409)

我有一些htmls是我在不同时期从同一个网站上刮下来的。原始数据是这样的

timestamp, htmlcontent(500KB)
..

我已经编写了一个解析器,从html中解析出一些有趣的字段,并试图基于解析出的字段构建一个搜索引擎。不仅基于html的原始文本,还基于原始完整的html内容>
现在我的数据看起来像:

timestamp, htmlcontent, parsedfield1, parsedfield2

我希望用户搜索timestamp,parsedfield1或parsedfield2,我的搜索引擎返回匹配用户查询并填充浏览器的原始html。。。所以感觉就像一台搜索引擎时间机器:)
在这种情况下,我想知道我应该如何设计索引?我应该存储哪些字段,哪些不应该。我正在看《lucene在行动》一书,想知道有谁能帮我解决这个问题。。
根据我对索引的理解,schema.xml中有几个属性。。。是否索引?是否储存?。。。。我假设,“无论您想在查询结果中包含什么,都应该存储它”。。在这种情况下,我必须存储包含原始html的列。。。
由于该列太大,一条记录通常约为数百kb。。。只有几百行。。你可以很容易地得到一个几乎1gb的数据集。。。这在solr中不起作用,我正在尝试使用lucene索引这些列,它遇到了heapsize问题。。
这里有另一个想法:也许我应该存储parsedfield1、parsedfield2和指针。。。其中point列是原始html文件的绝对路径。当然,在这种情况下,我需要将每个html存储到本地/或hdfs上的单独文件中。。。所以当用户搜索parsedfield1时,它会返回绝对路径,我会去检索那些文件。。。
我想我正在尽可能清楚地描述这个问题,想知道有没有人能花一分钟时间给我一些方向性的指导。。。
非常感谢!

zpjtge22

zpjtge221#

一些准则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" />

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

是否存储字段

要对其执行搜索的字段不需要存储,除非要在结果中显示它们

相关问题