是否有可能基于Elasticsearch索引来提高建议

时间:2019-12-05 08:56:30

标签: elasticsearch

我有多个索引,我希望从中获得建议,但是我想根据它们来自的索引来对建议进行评分/排序。我已经成功地提高了基于索引的搜索量(使用indexs_boost),但这似乎对建议不起作用。我尝试过类似的事情:

GET index1,index2/_search
{
  "indices_boost" : [
        { "index1" : 9 },
        { "index2" : 1 }
    ],
  "suggest": {
    "mySuggest":{
      "text":"someText",
      "completion": {
        "field":"suggestField",
        "size":6
      }
    }
  }
}

这可行吗?

此刻,我依靠代码对建议进行排序。

1 个答案:

答案 0 :(得分:1)

我相信您可以尝试在context suggester中使用类别提升来实现所需的行为。您需要在每个建议文档中附加一个特殊的类别字段,该字段可以与索引名称完全相同。

如何使用category上下文来增强建议

映射可能看起来像这样:

PUT food
{
    "mappings": {
        "properties" : {
            "suggestField" : {
                "type" : "completion",
                "contexts": [
                    { 
                        "name": "index_name",
                        "type": "category"
                    }
                ]
            }
        }
    }
}

出于演示目的,我将创建另一个索引,与上面的索引完全相同,但名称为movie。 (索引名称可以是任意的。)

让我们添加建议文档:

PUT food/_doc/1
{
    "suggestField": {
        "input": ["timmy's", "starbucks", "dunkin donuts"],
        "contexts": {
            "index_name": ["food"] 
        }
    }
}

PUT movie/_doc/2
{
    "suggestField": {
        "input": ["star wars"],
        "contexts": {
            "index_name": ["movie"] 
        }
    }
}

现在我们可以运行带有增强功能的建议查询:

POST food,movie/_search
{
    "suggest": {
        "my_suggestion": {
            "prefix": "star",
            "completion": {
                "field": "suggestField",
                "size": 10,
                "contexts": {
                    "index_name": [
                        {
                            "context": "movie",
                            "boost": 9
                        },
                        {
                            "context": "food",
                            "boost": 1
                        }
                    ]
                }
            }
        }
    }
}

这将返回如下内容:

{
  "suggest": {
    "my_suggestion": [
      {
        "text": "star",
        "offset": 0,
        "length": 4,
        "options": [
          {
            "text": "star wars",
            "_index": "movie",
            "_type": "_doc",
            "_id": "2",
            "_score": 9.0,
            "_source": ...,
            "contexts": {
              "index_name": [
                "movie"
              ]
            }
          },
          {
            "text": "starbucks",
            "_index": "food",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.0,
            "_source": ...,
            "contexts": {
              "index_name": [
                "food"
              ]
...

indices_boost为什么不起作用?

似乎indices_boost参数只影响搜索,不建议。 _suggest曾经是一个独立的端点,但was deprecated可能是造成混淆的原因。

希望有帮助!