说我有这些字段声明:
<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时,所有字段的提升是否会“平稳”?
答案 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"/>