我有许多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文件夹。 最佳答案
如果不需要对多个表执行搜索,我将实现一个Lucene index pro MySQL表。另一种方法是将所有内容写入一个索引,并将表名添加到每个lucene文档中,这样就可以将搜索限制在特定的表中。
AFAIK Lucene不支持与您所希望的方式相同的SHOW TABLES,但是您可以自己轻松地做到这一点,例如对目录使用命名约定。
我建议看看Hibernate搜索,这是一个很好的匹配您的需要,它构建了一个索引目录pro表,并允许您执行全文搜索,同时为您处理低级lucene问题。您只需通过注释与表对应的JPA实体来配置索引,并且必须实现全文查询。这比单独使用MySQL中的数据进行裸Lucene要简单得多,Hibernate Search为您构建索引,并与关系数据库(如MySQL)中的数据进行良好的集成。
关于java - 我应该使用多个Lucene目录/索引来搜索不同类型的数据吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36733123/