当您在Solr中执行copyField时,字段提升是否随之而来?

时间:2012-12-17 19:26:51

标签: solr

说我有这些字段声明:

<field name="Title" type="text_general" stored="true" multiValued="false" /> 
<field name="Body" type="text_general" stored="true" multiValued="false" /> 

当我对“标题”进行索引时,我将提升设置为5,这意味着“标题”字段中的单词应该计为正常的5倍。

然后我这样做:

<copyField source="Title" dest="SearchText"/>
<copyField source="Body" dest="SearchText"/>

因此,我已将这两个字段复制到另一个名为“SearchText”的字段中。

当我搜索“SearchText”时,“标题”字段中的术语是否还带有5倍提升?或者他们在副本中丢失了吗?当你做一个copyField时,所有字段的提升是否会“平稳”?

3 个答案:

答案 0 :(得分:10)

在做了一些阅读之后,我认为提升被剥夺了。我们的解决方案就是:

我们创建了四个字段:SearchText,SearchText2,SearchText3和SearchText4。我们将所有复制到SearchText中,将一些内容复制到SearchText2中,将少量内容复制到SearchText3中,只将超级关键内容复制到SearchText4中。

然后,我们的“qf”参数看起来像这样:

SearchText, SearchText2^3, SearchText3^10, SearchText4^100

因此,我们在查询时将字段提升为无,3,10和100。

它看起来并不优雅,但效果很好,它允许我们在不重新索引的情况下调整提升。

此外,这里有一个抽象层:例如,通过在SearchText2中放置一些东西,我们说“这很重要”,但是,我们并没有定义 的重要性(就数字提升)直到查询时间。因此,copyField是抽象,实现中的“qf”参数。

答案 1 :(得分:0)

据我所知,提升是基于每个字段。因此,如果您对“标题”字段应用了提升,则“SearchText”字段没有相同的提升。您必须单独提升“SearchText”字段才能提升匹配率。

答案 2 :(得分:0)

执行copyfield时,不会复制字段的提升。但是,有一个简单的解决方案,不需要更改您的查询。

如果你为同一个字段做了多个copyfield,它会被多次复制到结果中,从而增加了它的重量。

所以,为了让你在标题上获得5倍的重量,你可以简单地做copyfield五次。

<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Body" dest="SearchText"/>