我正在我的应用程序中实现solr 3.6。我在我的文本文件中有以下数据..
**
date = 2011-07-08 time = 10:55:06 timezone =“IST”device_name =“CR1000i” device_id = C010600504-TYGJD3 deployment_mode =“路线” log_id = 031006209001 log_type =“反病毒”log_component =“FTP” log_subtype =“Clean”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 =“从服务器下载大小为550k的文件resume.doc的FTP下载 ftp.myftp.com无法完成,因为文件感染了病毒 codevirus“
**
现在我想基于键值对分割上面的数据..并希望根据键对每个值进行索引。 我希望更改应该在配置文件中..我已经通过了标记器,其中whitespaceokenizer可能工作。但希望整个结构被索引..所以任何人都可以帮我这个??? 感谢..
答案 0 :(得分:1)
我知道没有令牌器可以做到这一点。
使用静态字段:
您必须将所有“键”定义为schema.xml中的字段。它们应该具有相关的类型(日期,字符串等)。
使用这些字段创建POJO并解析此键/值对并填充POJO。使用solrj将此pojo添加到solr。
使用动态字段:
在这种情况下,您不需要在架构中定义键,而是使用动态字段(基于数据类型)。您仍然需要解析键/值对并添加到solr文档。需要使用solrInputdoc.addField方法添加这些字段。
当你定义添加新的键/值对时,客户端仍然需要知道这个新键的存在。但是你的索引器不需要。
答案 1 :(得分:0)
使用tokenizer无法做到这一点。为每个字段调用标记符,但在将数据传递到字段之前需要进行处理。
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在这个时刻出现故障,所以如果有错误页面,请再试一次。