我正在使用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"
}
}
},
}
}
答案 0 :(得分:-1)
我认为那是不可能的。
考虑到这一点,由于使用的是multi_match
,因此具有最多字段匹配项的文档可能得分最高,从而增加了他们也拥有最多<em>
的机会。仍然可以对hits
进行后处理并按数字排序。发生的次数。
之所以不可能,是因为highligting mechanism在sort
API之外工作,而一个无法访问另一个。人们总是可以用一些精美的脚本来“破解”它,但是有no straightforward way可以做到。
附录
查看此相关答案以访问脚本中的多个字段:https://stackoverflow.com/a/61620705/8160318