2012-06-30 134 views
0

这是我第一次使用Lucene的,我有一个文本文件是这样的:如何使用Lucene索引和搜索结构文本文件?

id,name,address,hobby 
1,namm1,address1,football 
2,namm2,address2,football 
3,namm3,address3,football 
4,namm4,address4,football 
5,namm5,address5,football 
6,namm6,address6,basketball 
7,namm7,address7,basketball 
8,namm8,address1,football 
9,namm9,address8,swimming 
... 

上面的文件是一个文本文件,其中包含百万行。现在,我要查找其地址为address1和爱好是从文件football记录,然后把记录到一次像这样的文件:

1,namm1,address1,football 
8,namm8,address1,football 
... 

第一个文件是非常大的,所以这将是非常慢慢找到一个又一个的记录。我想用Lucene为第一个文件建立一个索引(根据地址和爱好)。然后,我可以快速找到地址为address1,其业余爱好为football的记录,并将其放入新文件中。我从来没有使用Lucene进行编程。谁能给我一个类似的例子?

+2

你为什么这么渴望使用它的lucene? lucene和IR一般用于非结构化文本。对于结构化文本,可以使用结构化数据库和sql - 这可能会简单得多 – amit

+0

谢谢您的回复。实际上,我遇到的问题要复杂得多。为了明确问题,我简化了它。我已经使用数据库来解决问题。但后来,需要更新数千万条记录,需要建立大量的临时表。时间复杂度和空间复杂度都太难了。所以我想试试Lucene。谢谢! –

回答

0

这很简单。当你用Lucene索引一个文件时,你可以定义你自己的“Analyzer”。简而言之,分析器从源中提取信息并将其放入lucene“文档”的“字段”中。

当你搜索一些东西时,你可以定义Lucene应该考虑哪些字段。

因此,您的解决方案是编写一个分析器,将每列放入一个字段。使用MultiFieldQueryParser并在您的查询中指定字段名称。对于你的榜样,查询将

address:address1 hobby:football 
+0

我只是把我的评论放在答案中 – Persimmonium

0

我不认为他需要在所有写一个分析,他可以只使用Java代码来分析每一行的每个值在相应的字段,使用一个许多内建的分析仪