0

我在我的应用程序中实现 solr 3.6。因为我的文本文件中有以下数据..

**

date=2011-07-08 time=10:55:06 timezone="IST" device_name="CR1000i" device_id=C010600504-TYGJD3 deployment_mode="Route" log_id=031006209001 log_type="Anti Virus" log_component="FTP" log_subtype= "清理" status="Denied" priority=Critical fw_rule_id="" user_name="hemant" virus="codevirus" FTP_URL="ftp.myftp.com" FTP_direction="download" filename="hemantresume.doc" file_size="550k " file_path="deepti/virus.lnk 的快捷方式" ftpcommand="RETR" src_ip=10.103.6.100 dst_ip=10.103.6.66 protocol="TCP" src_port=2458 dst_port=21 dstdomain="myftp.cpm" sent_bytes=162 recv_bytes= 45 message="从服务器 ftp.myftp 下载大小为 550k 的文件 resume.doc。com 无法完成,因为文件感染了病毒 codevirus"

**

现在我想根据键值对拆分上述数据..并希望根据键对每个值进行索引..我希望更改应该在配置文件中..我已经通过 tokenizer 可以在其中 whitespaceokenizer工作。但希望整个结构被索引。所以有人可以帮我吗???谢谢..

4

2 回答 2

1

据我所知,没有分词器可以做到这一点。

使用静态字段:

您必须将所有“键”定义为 schema.xml 中的字段。它们应该具有相关类型(日期、字符串等)。

使用这些字段创建一个 POJO 并解析此键/值对并填充 POJO。使用 solrj 将此 pojo 添加到 solr。

使用动态字段:

在这种情况下,您不需要在模式中定义键,而是使用动态字段(基于数据类型)。您仍然需要解析键/值对并添加到 solr 文档。这些字段需要使用 solrInputdoc.addField 方法添加。

当您定义添加新的键/值对时,客户端仍然需要知道这个新键的存在。但是您的索引器不需要。

于 2012-06-26T14:04:46.913 回答
0

这不能用分词器完成。为每个字段调用标记器,但您需要在将数据交给字段之前进行处理。

Transformer 可能会这样做,或者您可以在将其作为 XML 提交之前进行一些简单的转换。编写读取该格式并为 Solr 提交生成正确 XML 格式的东西应该不难。在 Python 中肯定不会很难。

对于此输入:

date=2011-07-08 time=10:55:06 timezone="IST" device_name="CR1000i"

您需要在模式中创建匹配字段,并生成:

<doc>
  <field name="date">2011-07-08</field>
  <field name="time">2011-07-08</field>
  <field name="timezone">IST</field>
  <field name="device_name">CR1000i</field>
  ...

同样在此预处理中,您几乎肯定希望将前三个字段转换为 UTC 中的单个日期时间。

有关 Solr XML 更新格式的详细信息,请参见:http ://wiki.apache.org/solr/UpdateXmlMessages

此时 Apache wiki 已关闭,因此如果出现错误页面,请重试。

于 2012-06-26T14:59:43.113 回答