2017-10-05 107 views
0

Elasticsearch多重匹配不提升字段,這裏是代碼。Elasticsearch提升不起作用於mulit匹配

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
     "filtered": { 
      "query": { 
       "multi_match": { 
        "query": "shoes", 
        "fields": ["category^3", "brand^2", "title^1", "description"], 
        "fuzziness": "AUTO" 
       } 
      }, 
      "filter": { 
       "bool": { 
        "must": [], 
        "should": null 
       } 
      } 
     } 
    } 
} 

理想的情況下,我想那是什麼,如果有人搜索關鍵字的鞋子,他應該得到培訓相關的結果。在這種情況下,應該看看是否有鞋子的類別,這應該有3的提升。然後,應該看看是否有任何品牌中有關鍵字「鞋子」,這應該有一個提升2.然後它應該看標題和說明。

因此,如果一個產品具有上述所有標準,那麼它應該顯示出最高的提升。

編輯:這是我的映射。

{ 
    "mappings": { 
     "products": { 
      "properties": { 
       "variations": { 
        "type": "nested", 
        "index": "not_analyzed" 
       } 
      } 
     } 
    } 
} 

編輯:嗯,我沒有給現場的其餘部分定義的類型。我想保持它的默認。其次,我對查詢嵌套字段不感興趣。因爲這些通常包括產品的變化,例如顏色,尺寸等。這裏是一個示例文檔。

{ 
    "title": "100% Cotton Unstitched Suit For Men", 
    "slug": "100-cotton-unstitched-suit-for-men", 
    "price": 200, 
    "sale_price": 0, 
    "vendor_id": 32, 
    "featured": 0, 
    "viewed": 20, 
    "stock": 4, 
    "sku": "XXX-B", 
    "rating": 0, 
    "active": 1, 
    "vendor_name": "house_of_suits", 
    "brand": "armani", 
    "category": [ 
     "men_fashion", 
     "traditional_clothing", 
     "unstitched_fabric" 
    ], 
    "image": "imagename.jpg", 
    "variations": [ 
     { 
      "variation_id": "34", 
      "stock": 5, 
      "price": 200, 
      "variation_image": "", 
      "sku": "XXX-C", 
      "size": "m", 
      "color": "red" 
     }, 
     { 
      "variation_id": "35", 
      "stock": 5, 
      "price": 200, 
      "variation_image": "", 
      "sku": "XXX-D", 
      "size": "l", 
      "color": "red" 
     } 
    ] 
} 
+0

Boost是一個因素,不是「看」的順序。請舉例說明文件(並嘗試^ 300^200^100而不是^ 3^2^1) –

+0

我已經通過添加^ 300^200^100嘗試了您的推薦,但對評分沒有任何影響。 –

+0

您可以打印完整的文檔映射,以便我們可以看到這些字段的字段和數據類型。匹配查詢是爲了在分析的字段上運行,但我發現你的變體嵌套對象沒有被分析。 – zachdb86

回答

1

已過濾的查詢已棄用,應該用至少包含must子句和filter子句的bool替換。此外,你的場增強是正確的,但是,multi_match根據你定義的類型得分不同。默認類型best_fields使用來自最佳字段的_score。在下面的例子中,下面的例子使用了most_fields類型,它結合了來自每個字段的分數,並且應該完成你想要的。我會查看this頁面以瞭解更多關於不同類型的信息。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "multi_match": { 
      "query": "shoes", 
      "fields": ["category^3", "brand^2", "title^1", "description"], 
      "type": "most_fields" 
      } 
     } 
     ], 
     "filter": { 

     } 
    } 
    } 
} 
+0

謝謝zachdb。我遵循你的指示,但由於某些原因,我仍然沒有得到這些領域的提振。其次,相關性的最高分數小於1.但是不止一個字段中包含查詢。你認爲它可能不得不在地圖上做些什麼?我已經編輯了我的答案,並且包含了我的地圖 –

+0

在這個查詢中,提升係數可能很小以查看差異。你怎麼知道,你沒有提升? –

+0

你可以請運行解釋這個查詢並粘貼輸出。 – zachdb86