2014-03-06 106 views
3

我有一個索引將一些字段存儲爲數組,因爲它們可能有多個值,比如第一個/最後一個名字,因爲我們在Maiden名稱上保留歷史數據,暱稱ectElasticsearch查詢字段有多個值,一個匹配得分相等

 { 
     "_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", 
    }, 

然而,當我這樣做,其中一個文檔對屬性有多個值的搜索,它會給出比一個文件,讓只在使用匹配

屬性有一個價值較低的分數指數在上方,它獲得了第二個更高的紀錄,因爲第一個紀錄有兩個姓氏,而第二個紀錄是一個

我怎麼能說如果我匹配多個值的字段上的一個值,它被評爲相同的 作爲只有一個值的字段?像Max我需要在這裏匹配是1

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

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

      }, 
      { 

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

      } 

    ] 
     } 

    } 
} 

任何幫助非常感謝

回答

1

考慮切換到BM25-similarity model。具體而言,您要將b的值設置爲0

另外,下面是Elasticsearch/Lucene的默認相似度模型和BM25:Similarity in Elasticsearch的深度比較。

+0

,請在您的elasticsearch.yml文件中放入index.similarity.default.type:BM25。優秀的答案! –

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" 
} 
+0

好吧,我明白了,但如果我添加了第三個標準,我總是會碰到我最低的應該匹配,我的問題應該是我怎麼能說一個場上的兩個值匹配得分相同作爲相同字段上的匹配,只有其他人查找的值爲 –

相關問題