1

我正在使用 Solr 和 edismax 解析器搜索产品数据库,我想让某些领域的命中比其他领域的命中更重要。假设每个产品都有一个名称和一个简短描述,还有其他可能是动态的字段。应该搜索所有字段,但nameshort_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 *)?

4

0 回答 0