我正在使用 Solr 和 edismax 解析器搜索产品数据库,我想让某些领域的命中比其他领域的命中更重要。假设每个产品都有一个名称和一个简短描述,还有其他可能是动态的字段。应该搜索所有字段,但name和short_description应该比其他字段更重要(或更少)。
我知道这可以在查询时使用qf参数(文档)来完成。我可以看到它有效。根据提供的字段,文档被完美地上下评分。
问题是我显然需要提及所有要搜索的字段,而其他字段可能是动态的。也许我可以以某种方式获取所有相关字段并发送它们,但我更喜欢索引时的解决方案。
我有点继承了这个代码,代码现在正在做的是将以下 JSON 发送到索引:
{
"add": {
"boost": 1,
"doc": {
(...)
"name": {
"boost": 0.3,
"value": "product name #1"
},
(...)
"short_description": {
"boost": 3,
"value": "some text"
},
我希望short_description中的命中值会增加 3,名称中的命中值会增加 0.3,即与其他所有内容相比得分(默认文档值 1)。
发生的情况是名称命中的文档与short_description命中的文档得分相同。
(搜索魔多)
{
(...)
"name": "mordor",
"short_description": "this is a random description",
(...)
"score": 3.5821834
},
{
(...)
"name": "this is a random description",
"short_description": "mordor",
(...)
"score": 3.5821834
}
我发现这个文件说:
如果您在每个文档上都设置索引时间字段提升,那么它们将毫无价值。
这就是它不起作用的原因吗?还是我做错了什么?如果它不能那样工作,有没有办法在查询时将通配符输入到qf参数中(即qf=name^3 short_description^0.3 *)?