12

假设我有这些字段声明:

<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 时,所有字段的提升是否都“拉平”?

4

3 回答 3

11

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

我们创建了四个字段:SearchText、SearchText2、SearchText3 和 SearchText4。我们将所有内容复制到 SearchText 中,将一些内容复制到 SearchText2 中,将较少的内容复制到 SearchText3 中,并且仅将超关键的内容复制到 SearchText4 中。

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

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

因此,我们在查询时将字段提高了 none、3、10 和 100。

它看起来并不优雅,但它运行良好,它允许我们在不重新索引的情况下调整 boost。

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

于 2012-12-19T15:18:07.983 回答
0

据我所知,提升是基于每个领域的。因此,如果您对“Title”字段应用了提升,那么“SearchText”字段不会具有相同的提升。您必须单独提升“SearchText”字段才能提升匹配度。

于 2012-12-18T04:03:58.880 回答
0

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

如果您copyfield对同一字段执行多个 ',它将被多次复制到结果中,从而增加了它的权重。

因此,要使标题的权重达到 5 倍,您可以简单地做copyfield5 次。

<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"/>
于 2016-11-09T22:12:23.730 回答