Java 将更多类似Lucene的内容限制在我文档的一个子集
我正在使用Lucene为我的网站内容编制索引,并提供搜索工具。我还使用Lucene的MoreLikeThis为站点生成“相关页面”功能。我的网站是多语言的,所以我需要一次将更多的语言限制在一种特定的语言上 有人知道怎么做吗?返回一个查询对象。Java 将更多类似Lucene的内容限制在我文档的一个子集,java,search,lucene,morelikethis,Java,Search,Lucene,Morelikethis,我正在使用Lucene为我的网站内容编制索引,并提供搜索工具。我还使用Lucene的MoreLikeThis为站点生成“相关页面”功能。我的网站是多语言的,所以我需要一次将更多的语言限制在一种特定的语言上 有人知道怎么做吗?返回一个查询对象。 MoreLikeThis mlt=新的MoreLikeThis(ir) 读卡器目标=…//要查找与之相似的文档的原始来源 Query Query=mlt.like(目标); 您可以创建第二个查询来检查语言。然后使用包装这两个查询,您可以创建一个布尔查询,
MoreLikeThis mlt=新的MoreLikeThis(ir)
读卡器目标=…//要查找与之相似的文档的原始来源
Query Query=mlt.like(目标);
您可以创建第二个查询来检查语言。然后使用包装这两个查询,您可以创建一个布尔查询,如下所示:
BooleanQuery BooleanQuery=新的BooleanQuery()
添加(MoreLikeThisQuery,booleansclause.occure.MUST)
添加(languageQuery,BooleanClause.Occurse.MUST);
不是很高效,但是如果你有一个小的语料库,它将完成工作 最后,我将其拆分为多个索引,然后执行MLT查询。否则的话,这个请求就太重了。我希望Lucene开发人员会这样做,如果您当前正在所有内容上运行MLT,那么添加语言查询不会使性能恶化太多(MLT比简单的过滤器重得多)。一个真正有效的解决方案将首先过滤语言,然后让MLT只对过滤后的文档集进行操作(需要研究MLT在内部如何工作,看看这是否可行)。我对此也很感兴趣,只是在我的用例中,有数千个子集都应该进行分离的相关性计算-/在进一步阅读代码时,我怀疑这需要对索引甚至索引格式进行更改。看起来术语只存储一次&全局存储,带有文档计数。另一种方法可能是定制IndexReader,每次都进行docFreq计算,但我不知道成本是多少!