基于匹配突出显示数量的Elasticsearch多重匹配评分

时间:2020-05-15 09:26:46

标签: elasticsearch elasticsearch-highlight

我正在使用script_score使用以下查询对象进行多重匹配搜索:

{
    _source: [
        'baseline',
        'cpcr',
        'date',
        'description',
        'dev_status',
        'element',
        'event',
        'id'
    ],
    track_total_hits: true,
    query: {
       script_score: {
           query: {
               bool: {
                   filter: []
               },
           },
           script: {
               source: "def v=doc['description'].value; def score = 10000; score += v.length(); score -= " + "\"" + searchObject.query + "\"" + ".indexOf(v)*50;", // throws error
               params: { highlights: 3 }
           }
       }
    },
    highlight: { fields: { '*': {} } },
    sort: [],
    from: 0,
    size: 50
}

我希望结果按其高亮显示的次数排序。例如,第一个记录将具有5个 ,第二个记录将具有4个 匹配,依此类推。目前,我的结果未按这种方式排序。

elasticsearch.config.ts

"settings": {
        "analysis": {
            "analyzer": {
                "search_synonyms": {
                    "tokenizer": "whitespace",
                    "filter": [
                        "graph_synonyms",
                        "lowercase",
                        "asciifolding"
                    ],
                }
            }
        }
    },

    "mappings": {
        "properties": {
            "description": {
                "type": "text",
                "analyzer": "search_synonyms"
            },
            "narrative": {
                "type":"object",
                "properties":{
                    "_all":{
                        "type": "text",
                        "analyzer": "search_synonyms"
                    }
                }
            },
        }
    }

Sample data

1 个答案:

答案 0 :(得分:-1)

我认为那是不可能的。

考虑到这一点,由于使用的是multi_match,因此具有最多字段匹配项的文档可能得分最高,从而增加了他们也拥有最多<em>的机会。仍然可以对hits进行后处理并按数字排序。发生的次数。

之所以不可能,是因为highligting mechanismsort API之外工作,而一个无法访问另一个。人们总是可以用一些精美的脚本来“破解”它,但是有no straightforward way可以做到。


附录

查看此相关答案以访问脚本中的多个字段:https://stackoverflow.com/a/61620705/8160318