2014-09-24 92 views
0

我正在嘗試在ElasticSearch中進行關鍵字搜索。我本來用這個:ElasticSearch MultiMatch字段提升似乎不起作用?

{ 
"query": { 
    "filtered": { 
     "filter": { 
      "and": [ 
       { 
        "fquery": { 
         "query": { 
          "query_string": { 
           "query": "Susan Sloan", 
           "default_operator": "AND" 
          } 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

然而,我的客戶希望在FIRST_NAME和last_name場比賽有超過在其他領域,如家庭成員的偏好相匹配;他們不喜歡Name =「John Smith」和Spouse =「Susan Sloan」的結果在Name =「Susan Sloan」之前顯示。所以我試着把它改成一個multimatch查詢,並且在first_name和last_name字段上有最大的提升。

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "bool": { 
        "must": [ 
         { 
          "multi_match": { 
           "fields": [ 
            "first_name^9", 
            "last_name^9", 
            "collection.name^7", 
            "collection.category.name^7", 
            "record_type.name^7", 
            "location.city.name^7", 
            "location.region.name^7", 
            "location.country.name^7", 
            "location.country.name^7", 
            "relationships.first_name^7", 
            "relationships.last_name^7", 
            "attributes.name^1", 
            "original_text^1" 
           ], 
           "query": "Susan Sloan", 
           "operator": "AND", 
           "type": "cross_fields" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

但是,這些提升似乎沒有做任何事情。儘管我有first_name =「Susan」和last_name =「Sloan」的記錄,但我得到的第一個結果是「Abel Conant」,其中「Susan」和「Sloan」出現在original_text字段中。

回答

1

讓您cross_fields類型的multi_match

"query": "Susan Sloan", 
"operator": "AND", 
"type": "cross_fields" 
+0

我補充說,但我我仍然首先獲得與original_text匹配的結果。在我原來的帖子中編輯我的查詢 – 2014-09-24 17:55:36

+0

然後我認爲你需要單獨測試你的查詢的這一點,看看它是如何工作的大查詢。 – 2014-09-24 19:19:27

0

除了添加「類型」:「cross_fields」,我也不得不加上「分析」:「標準」

+0

那麼,我假定了默認設置。 – 2014-09-24 20:08:18