2015-07-03 24 views
1

如何在elasticsearch的結果中包含不匹配的項目?在elasticsearch中顯示不匹配的文檔

例如,

我有一個列表,有些看起來是這樣的:

[ 
    { 
     "_index": "products", 
     "_type": "71", 
     "_id": "556637aed75a1334f69db5d7", 
     "_score": 1, 
     "_source": { 
      "product_id": "556637aed75a1334f69db5d7", 
      "categories": [ 
       28 
      ], 
      "tags": ["shirts"] 
     } 
    }, 
    { 
     "_index": "products", 
     "_type": "71", 
     "_id": "556637aed75a1334f69db5d2", 
     "_score": 1, 
     "_source": { 
      "product_id": "556637aed75a1334f69db5d2", 
      "categories": [ 
       27 
      ], 
      "tags": [] 
     } 
    }, 
    { 
     "_index": "products", 
     "_type": "71", 
     "_id": "556637aed75a1334f69db5e4", 
     "_score": 1, 
     "_source": { 
      "product_id": "556637aed75a1334f69db5e4", 
      "categories": [ 
       26 
      ], 
      "tags": [ 
       "shoes" 
      ] 
     } 
    }, 
    { 
     "_index": "products", 
     "_type": "71", 
     "_id": "556637aed75a1334f69db5dd", 
     "_score": 1, 
     "_source": { 
      "product_id": "556637aed75a1334f69db5dd", 
      "categories": [ 
       23 
      ], 
      "tags": [] 
     } 
    } 
] 

我想拿到旁邊會顯示第一個匹配的文件和文件不匹配的結果。

如果我的查詢看起來是這樣的:

{ 
    "query": { 
     "terms": { 
      "tags": [ 
       "shorts", 
       "shoes" 
      ] 
     } 
    }, 
    "sort": [ "_score" ] 
} 

我會得到只有要麼shoesshorts標籤的物品清單。

我想也顯示匹配後的項目不匹配。

此外,我想在我的搜索查詢中添加categories。有人可以幫我弄這個嗎?

回答

1

首先你不需要sort_score。默認情況下,結果的排序是按分數完成的。

其次,沒有顯示「不匹配」的文檔這樣的事情。你需要定義自己的匹配「不匹配」的規則。在我看來,你需要一個match_all。第三,我建議使用bool,其中每個條件(匹配標籤,匹配類別,match_all - 匹配「不匹配」的文檔)應放置在should中。每一個條件都會給分數增加一些東西。這意味着,條件越匹配,得分越高。如果tagscategories不匹配,則剩餘文檔(與match_all匹配的文檔)的得分將很低,因此它們將位於列表的末尾。

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "terms": { 
      "tags": [ 
       "shorts", 
       "shoes" 
      ] 
      } 
     }, 
     { 
      "match_all": {} 
     }, 
     { 
      "terms": { 
      "categories": [26,23] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

哇,不能相信這是這麼簡單。謝謝,安德烈,我一直試圖在過去的兩天里弄清楚這一點。 – clueless

+0

:-)不用擔心,我很高興我能夠幫助你。 –

+0

順便說一句,是否有可能提高「類別」的相關性?我試着在'terms'後添加'{boost:2}',但這給了我一個錯誤。編輯:抱歉不是一個錯誤,而是沒有給我不同的結果。 – clueless

相關問題