我有一个包含电影专营权的索引,我希望确切的词/短语匹配得分更高。例如,如果我搜索"Star Trek"
,我希望"Star Trek"
得分最高(第一个结果),然后是"Star Trek Beyond"
和"Star Trek Into Darkness"
。目前,当我搜索"Star Trek"
时,会得到标题中带有较高得分的其他单词。这可能吗?
如果搜索词周围存在一些其他不匹配的文本,例如:"(randomText) Star Trek (randomText)"
这是我的设置/映射:
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"properties": {
"title_english": {
"type": "text",
"fields": {
"raw": { "type": "keyword" },
"space": { "type": "text", "analyzer": "whitespace" }
},
"analyzer": "autocomplete"
},
"title_native": {
"type": "text",
"fields": {
"raw": { "type": "keyword" },
"space": { "type": "text", "analyzer": "whitespace" }
},
"analyzer": "autocomplete"
},
"title_romaji": {
"type": "text",
"fields": {
"raw": { "type": "keyword" },
"space": { "type": "text", "analyzer": "whitespace" }
},
"analyzer": "autocomplete"
},
"title_synonyms": {
"type": "text",
"fields": {
"raw": { "type": "keyword" },
"space": { "type": "text", "analyzer": "whitespace" }
},
"analyzer": "autocomplete"
}
}
}
}
这是我的查询:
'query': {
'bool': {
'must': {
'multi_match': {
'query': request.args.get('query'),
'analyzer': 'standard',
'fields': ['title_*']
},
},
'should': [{
'term': {
'title_*.raw': {
'value': request.args.get('query'),
'boost': 3
}
}
},
{
'prefix': {
'title_*.raw': {
'value': request.args.get('query'),
'boost': 2
}
}
}]
}
}