2017-04-04 64 views
0

我是elasticsearch的新手。我建立了不同電子產品及其配件的數據庫。從該數據庫中,我試圖使用項目名稱搜索所有筆記本電腦,筆記本電腦和計算機。但它也返回一些配件,如筆記本電腦揹包或筆記本電腦外殼等。我在查詢中使用must_not子句,但它並沒有真正消除不必要的結果。有人能告訴我做錯了什麼嗎?或者我應該如何改進我的查詢?在ElasticSearch中如何過濾某些單詞的結果集?

30 res = es.search(index=Index, body={ 
31   "query": { 
32    "filtered": { 
33     "query": { 
34      "match_all": {} 
35      }, 
36     "filter": { 
37      "bool": { 
38       "must": [ 
39        { 
40         "terms": { 
41          "name": [ 
42           "laptop","notebook","computer" 
43           ], 
44          "execution" : "or" 
45          } 
46         } 
47        ], 
48       "must_not": [ 
49        { 
50         "term": { 
51          "name": "Backpack" 
52          } 
53         } 
54        ] 
55       } 
56      } 
57     } 
58    } 
59 
60   }) 

在此先感謝。 請注意,我正在嘗試使用python和elasticsearch python庫。

回答

1

當您將文檔放入索引時,ElasticSearch將分析器應用分隔符以將輸入拆分爲多個項並對其應用一些過濾器。似乎默認分析器也會將lowercase標記過濾器應用於您的輸入,因此結果標記爲小寫。你可以嘗試使用的查詢與小寫長期這樣

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "match_all": {} 
      }, 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "terms": { 
           "name": [ 
            "laptop", 
            "notebook", 
            "computer" 
           ], 
           "execution": "or" 
          } 
         } 
        ], 
        "must_not": [ 
         { 
          "term": { 
           "name": "backpack" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

或者你可以嘗試使用match查詢,而不是term查詢

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "match_all": {} 
      }, 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "terms": { 
           "name": [ 
            "laptop", 
            "notebook", 
            "computer" 
           ], 
           "execution": "or" 
          } 
         } 
        ], 
        "must_not": [ 
         { 
          "match": { 
           "name": "Backpack" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

第二個選項可能工作稍微慢一點,但如果您的關鍵字不標記化術語,這會給其他輸入的預期結果

+0

感謝隨機。真的很感謝這個幫助。你讓我今天一整天都感覺很好。 – learner

相關問題