1

我的网站上有一个搜索页面,我正在搜索名称字段,我需要返回通配符和模糊匹配以及完全匹配;但是,完全匹配应该在页面上显示得更高,所以我试图确保名称是完全匹配、通配符匹配或模糊匹配,精确匹配提升最高,模糊匹配提升最低. 根据建议,我正在使用 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,但得到了相同的结果......似乎我做的提升有多大或多小并不重要。

4

0 回答 0