我应该使用多个Lucene目录/索引来搜索不同类型的数据吗?

时间:2016-04-20 03:11:16

标签: java mysql lucene full-text-search

我有许多MySQL表来存储不同类型的数据,如商品,类别,品牌,供应商等。他们每个人都需要通过Lucene实现全文搜索。

因此,我计划为每个表构建一个Lucene目录(以及一个与此目录对应的IndexWriter +一个IndexReader),例如

HashMap<String, Directory> = ...;
put("goods", FSDirectory.open(luceneDirRoot + "/goods"));
put("catagories", FSDirectory.open(luceneDirRoot + "/catagories"));
...

这是使用Lucene的好习惯吗?

更进一步,我怎么知道Lucene制作了多少个目录,比如MySQL命令“SHOW TABLES”? new File(luceneDirRoot).listFiles()可以是一个选择,但我不确定是否还有其他非Lucene文件夹。

1 个答案:

答案 0 :(得分:1)

如果你不需要在几个表上执行搜索,我会实现一个Lucene index pro MySQL表。另一种方法是将所有内容写入一个索引并将表名添加到每个lucene文档中,这样就可以将搜索限制在特定的表中。

AFAIK Lucene不支持SHOW TABLES等同于你想要的方式,但你可以轻松地自己做,例如:通过使用目录的命名约定。

我建议您查看Hibernate Search,这是一个很好的匹配您的需求,它构建一个索引目录专业表,并允许您执行全文搜索,同时处理低级lucene问题。您只需通过注释与表对应的JPA实体来配置索引,并且必须实现全文查询。这比使用MySQL自己的数据裸露Lucene容易得多,Hibernate Search为您构建索引并与来自关系数据库(如MySQL)的数据很好地集成。