我的网站上有一个搜索页面,我正在搜索名称字段,我需要返回通配符和模糊匹配以及完全匹配;但是,完全匹配应该在页面上显示得更高,所以我试图确保名称是完全匹配、通配符匹配或模糊匹配,精确匹配提升最高,模糊匹配提升最低. 根据建议,我正在使用 dis_max 查询,因此对于每个名称字段,我都有一个单独的 dis_max。为简单起见,我在下面的示例查询中只包含了一个 dis_max,但如果我也在搜索 first_name,我将在“first_name”的“must”中添加第二个 dis_max。
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"dis_max": {
"queries": [
{
"match": {
"last_name": {
"type": "phrase",
"query": "COTTER",
"analyzer": "standard",
"boost": 10000
}
}
},
{
"query_string": {
"query": "COTTER",
"default_field": "last_name",
"boost": 0.05
}
},
{
"match": {
"last_name": {
"query": "COTTER",
"fuzziness": 2,
"boost": 0.001,
"analyzer": "standard",
"fuzziness": 2,
"prefix_length": 1
}
}
}
]
}
}
]
}
}
}
}
问题是提升似乎不起作用。当我删除 dis_max 中的后两个查询并且只对“Cotter”进行短语匹配时,我得到的结果是 last_name “Cotter”。但是,当我使用所有三个查询时,我得到的第一个结果是“Carter”和“Carder”......模糊匹配的排名高于(或等于)精确匹配,即使模糊匹配的提升是0.001 和精确匹配的提升是 10000。我也分别尝试了值 0.1 和 1,但得到了相同的结果......似乎我做的提升有多大或多小并不重要。