【问题标题】:Elasticsearch: index boost with completion suggesterElasticsearch:使用完成建议器提升索引
【发布时间】:2020-10-28 11:09:15
【问题描述】:

在 Elasticsearch 中使用完成提示时是否可以使用index boost?我尝试了许多不同的方法,但似乎不起作用。没有在文档中找到任何声称它不适用于完成建议的参考。示例:

POST index1,index2/_search
{
  "suggest" : {
    "name_suggest" : {
      "text" : "my_query",
      "completion" : {
        "field" : "name_suggest",
        "size" : 7,
        "fuzzy" :{}
      }
    }
  },
  "indices_boost" : [
        { "index1" : 2 },
        { "index2" : 1.5 }
    ]
}

以上不返回提升分数。与没有indices_boost 参数的情况下运行它相比,分数是相同的。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    尝试了几个选项,但这些选项不能直接起作用,相反,您可以在索引时定义文档的权重,这些可以用作获得提升文档的解决方法,下面是完整的示例。

    index1、index2的索引映射相同

    {
      "mappings": {
        "properties": {
          "suggest": {
            "type": "completion"
          },
          "title": {
            "type": "keyword"
          }
        }
      }
    }
    

    在 index-1 中权重的索引文档 1

    {
        "suggest": {
            "input": [
                "Nevermind",
                "Nirvana"
            ],
            "weight": 30
        }
    }
    

    类似的文档以不同的权重插入到 index-2 中

    {
        "suggest": {
            "input": [
                "Nevermind",
                "Nirvana"
            ],
            "weight": 10 --> note less weight
        }
    }
    

    现在简单的搜索会根据重量对其进行排序

    {
        "suggest": {
            "song-suggest": {
                "prefix": "nir",
                "completion": {
                    "field": "suggest"
                }
            }
        }
    }
    

    以及搜索结果

        {
                            "text": "Nirvana",
                            "_index": "index-1",
                            "_type": "_doc",
                            "_id": "1",
                            "_score": 34.0,
                            "_source": {
                                "suggest": {
                                    "input": [
                                        "Nevermind",
                                        "Nirvana"
                                    ],
                                    "weight": 30
                                }
                            }
                        },
                        {
                            "text": "Nirvana",
                            "_index": "index-2",
                            "_type": "_doc",
                            "_id": "1",
                            "_score": 30.0,
                            "_source": {
                                "suggest": {
                                    "input": [
                                        "Nevermind",
                                        "Nirvana"
                                    ],
                                    "weight": 10
                                }
                            }
                        }
                    ]
    

    【讨论】:

    • 但我正在查询时间(上面已经发布了search 请求)-我错过了什么
    • @Anupam 您有机会查看更新后的答案吗?
    • 刚刚看到更新的答案。感谢您尝试解决方法。这似乎是一个很好的解决方法。那么score 会根据权重值提升吗?我想首先显示来自特定索引的结果(在 search-as-you-type 下拉菜单中)。我的完成建议返回 7 个结果,有时我需要的结果甚至不在 7 中,因为分数较低(否则我可以在收到结果后重新排序)
    • index boost 适用于 match 查询,但不适用于 completion suggester,似乎。但我想避免使用常规搜索而不是 completion suggester,因为据我了解,completion suggester 旨在实现更快的查找(搜索时需要输入)
    • @Anupam 你是对的,但我查看了 Elasticsearch 源代码,似乎他们还没有添加它的支持,在他们的网站上也提到这个功能仍在开发中,这可能是缺少此功能的原因。
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2015-05-07
    • 2023-04-08
    • 1970-01-01
    • 2020-07-14
    • 2023-03-12
    相关资源
    最近更新 更多