Elasticsearch查询具有多个值的字段,一个匹配分数相等

时间:2014-03-06 20:47:39

标签: elasticsearch

我有一个索引,它将某些字段存储为数组,因为它们可能有多个值,例如名字/姓氏,因为我们保留了关于婚前姓名的历史数据,昵称等等

     {
        "_index": "structured",
        "_type": "entity",
        "_id": "0000230799",
        "_score": 1,
        "_source": {
           "FIRST_NAME": [
              "Deborah",
              "Debbie"
           ],

           "LAST_NAME": [
              "Loverde",
              "Frogameni"
           ]
        }
     },
     {
        "_index": "structured",
        "_type": "entity",
        "_id": "0000309483",
        "_score": 1,
        "_source": {
           "FIRST_NAME": [
              "Anthony",
              "Tony"
           ],
           "LAST_NAME": "Frogameni",
     },

然而,当我进行搜索时,如果某个文档在该属性上有多个值,那么它的得分会低于仅在匹配的属性上有一个值的文档

使用上面的索引,它得分第二个记录更高,因为第一个记录有两个姓氏而第二个记录是

我怎么能说如果我在一个具有多个值的字段上匹配一个值,则得分相同 作为只有一个值的字段?像我需要匹配的最大值是1

   POST /structured/entity/_search?explain=true
    {
     "query": { 
        "bool":{
            "should":[
            { 

                   "match_phrase_prefix":{
                    "FIRST_NAME":{"query":"debbi"}
                    }

            },
            { 

                   "match_phrase_prefix":{
                    "LAST_NAME":"frogameni"
                    }

            }  

     ]
        }

    }
}

任何帮助非常感谢

2 个答案:

答案 0 :(得分:1)

考虑切换到BM25-similarity model。具体来说,您希望将b - 值设置为0

此外,这里是对Elasticsearch / Lucene的默认相似性模型和BM25进行更深入的比较:Similarity in Elasticsearch

答案 1 :(得分:0)

您正在错误的位置应用最小匹配设置。您还需要将其设置为2而不是1,因此您必须匹配这两个术语。试试这个

{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase_prefix": {
            "FIRST_NAME": {
              "query": "debbi"
            }
          }
        },
        {
          "match_phrase_prefix": {
            "LAST_NAME": "frogameni"
          }
        }
      ],
      "minimum_should_match": 2
    }
  },
  "from": "0",
  "size": "11"
}