【问题标题】:How do I use Lucene to index and search structure text files?如何使用 Lucene 索引和搜索结构文本文件?
【发布时间】:2012-06-30 12:29:41
【问题描述】:

这是我第一次使用 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
...

上面的文件是一个包含 1,000,000 行的文本文件。现在我想从文件中找到地址为address1,爱好为football的记录,然后将记录放入另一个文件中,如下所示:

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

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

【问题讨论】:

  • 你为什么如此渴望使用 lucene 呢? lucene 和 IR 一般用于非结构化文本。对于结构化文本,您可以使用结构化数据库和 sql——这可能会简单得多
  • 感谢您的回复。其实我遇到的问题要复杂得多。为了把问题说清楚,我把它简化了。我已经使用数据库来解决这个问题。但是后期需要更新几千万条记录,需要建大量的临时表。时间复杂度和空间复杂度都太难了,所以想试试Lucene。谢谢!

标签: java lucene indexing


【解决方案1】:

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

当您搜索某些内容时,您可以定义 Lucene 应该考虑哪些字段。

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

address:address1 hobby:football

【讨论】:

  • 我将把我的评论放在答案中
【解决方案2】:

我认为他根本不需要编写分析器,他可以使用许多内置分析器之一,使用 java 代码解析每一行并将每个值放在适当的字段中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多