我有一个弹性搜索索引,并且正在使用以下查询:
"_source": [
"title",
"content"
],
"size": 15,
"from": 0,
"query": {
"bool": {
"must": {
"multi_match": {
"query": "{{query}}",
"fields": [
"title",
"content"
],
"operator": "or"
}
},
"should": [
{
"multi_match": {
"query": "{{query}}",
"fields": [
"title.standard^16",
"content.standard^2"
],
"operator": "and"
}
},
{
"match_phrase": {
"content.standard": {
"query": "{{query}}",
"_name": "Phrase on title",
"boost": 1000
}
}
}
]
}
},
"highlight": {
"fields": {
"content": {}
},
"fragment_size": 100
}
}
这是我设置的映射:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_metaphone"
]
}
},
"filter": {
"my_metaphone": {
"type": "phonetic",
"encoder": "metaphone",
"replace": true
}
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"term_vector": "with_positions_offsets",
"analyzer": "my_analyzer",
"fields": {
"standard": {
"type": "text"
},
"stemmer": {
"type": "text",
"analyzer": "english"
}
}
},
"content": {
"type": "text",
"term_vector": "with_positions_offsets",
"analyzer": "my_analyzer",
"fields": {
"standard": {
"type": "text"
},
"stemmer": {
"type": "text",
"analyzer": "english"
}
}
}
}
}
}
这是我的查询逻辑:
1)如果出现,它将给予短语最高优先级。
2)如果不是,它将使用标准分析器(即文本,按原样)并给予最高优先级。
3)如果所有其他都不匹配,它将使用语音分析器得到结果,这是最低优先级。
但显然这有一些错误,因为它似乎给予语音分析器比标准或短语更高的优先级。例如,如果我搜索“Person of Indian Origin”,它会在顶部返回突出显示“Pursuant”“追求”的结果,尽管我知道存在大量印度血统的人,但结果数量非常非常少。我该如何解决这个问题?