2017-10-04 70 views
0

我在尝试使用MoreLikeThis Solr的功能来查找基于其他文档的类似文档,但我不太了解这些功能的一些功能是如何工作的。Solr中的术语向量

正如它说的here,MoreLikeThis组件效果最好,当存储termVectors时。我的困惑来了。

在Solr的schema.xml文件的字段(假设该字段包含电影评论文本)上启用标志termVectors就足够了吗?插入它后,Solr会计算给定字段的termVectors,然后在随后调用MoreLikeThis处理函数时存储它,然后使用calculcated termVectors?

回答

1

简短答案是否定的,您需要在此类架构更改后重新编制索引。 启用了术语矢量,将加速从原始输入文档中查找有趣术语的过程(如果此文档位于索引中)。 第二阶段计时(当更多人喜欢此查询发生时)将保持不变。 有关MLT如何工作的更多信息[1]。

一般来说,将这些更改应用于模式时,需要重新索引文档以使Solr构建相关数据结构(术语向量是每个文档的迷你索引,并且需要存储特定文件磁盘[2] NB这样会增加你的磁盘利用率)

[1] https://www.slideshare.net/AlessandroBenedetti/advanced-document-similarity-with-apache-lucene

[2] https://lucene.apache.org/core/6_6_0/core/org/apache/lucene/codecs/lucene50/Lucene50TermVectorsFormat.html

+0

我居然没有一个模式呢,况且我有一个索引集文件。我的Solr核心现在是空白的,我刚刚开始。所以,如果我理解的很好 - Solr会在编制索引时为每个文档自动构建术语向量,对吧? – wookie

+1

事实上,在模式中配置它之后,Solr会在建立索引时谨慎并构建数据结构。 MLT将自动使用这些结构(在内部,MLT代码对索引文件进行检查,并且如果它发现它正在评估的字段的矢量术语,它将自动使用它们) –

+0

很好,这是一个好消息。实际上我还有一个问题,因为我看到你对这个主题有很好的理解。 在执行MLT时,我希望它只考虑索引文档的有限子集,例如:我有一个150 000文档的索引,模式由id,title,content和publicationDate组成。 现在,我想对任意输入文档执行MLT查询,但是我希望查询仅在02-01-2014和02-04-2014之间考虑使用publicationDate的文档。 似乎'mlt.qf'是它的解决方案,对吗? – wookie