2017-10-17 103 views
0

我有一個類型的定義如下 「taggeable」:彈性搜索更多類似這樣的查詢與過濾器將結果

{ 
"mappings": { 
    "taggeable" : { 
     "_all" : {"enabled" : false}, 
     "properties" : { 
      "category" : { 
       "type" : "string" 
      }, 
      "tags" : { 
       "type" : "string", 
       "term_vector" : "yes" 
      } 
     } 
    } 
} 

}

我也有這個5號文件:

Document1 (tags: "t1 t2", category: "cat1") 
Document2 (tags: "t1" , category: "cat1") 
Document3 (tags: "t1 t3", category: "cat1") 
Document4 (tags: "t4" , category: "cat1") 
Document5 (tags: "t4" , category: "cat2") 

以下查詢:

{ 
"query": { 
    "more_like_this" : { 
     "fields" : ["tags"], 
     "like" : ["t1", "t2"], 
     "min_term_freq" : 1, 
     "min_doc_freq": 1 
     } 
    } 
} 

將返回:

Document1 (tags: "t1 t2", category: "cat1") 
Document2 ("t1", category: "cat1") 
Document3 ("t1 t3", category: "cat1") 

這是正確的,但此查詢:

{ 
"query": { 
    "filtered": { 
    "query": { 
     "more_like_this" : { 
     "fields" : ["tags"], 
     "like" : ["t1", "t2"], 
     "min_term_freq" : 1, 
     "min_doc_freq": 1 
    }, 
    "filter": { 
     "bool": { 
       "must": [        
        {"match": { "category": "cat1"}} 
       ] 
     } 
    } 
} 

} }

是返回:

Document1 (tags: "t1 t2", category: "cat1") 
Document4 (tags: "t4" , category: "cat1") 
Document2 (tags: "t1" , category: "cat1") 
Document3 (tags: "t1 t3", category: "cat1") 

這,Document4現在是也被檢索出來並且它的分數與Documen1相似,這是一個完美的匹配,即使Document4沒有包含在「t1 t2」中的任何單詞。

任何人都知道發生了什麼?我使用的是彈性搜尋提前

回答

1

2.4.6

感謝這就是爲什麼縮進一致是很重要的一個很好的例子。在這裏,我已經修改你發佈什麼一致的縮進,問題更加明顯(JSONLint是一個方便的工具,如果你不使用的編輯器有助於這一點):

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "more_like_this": { 
      "fields": ["tags"], 
      "like": ["t1", "t2"], 
      "min_term_freq": 1, 
      "min_doc_freq": 1 
     }, 
     "filter": { 
      "bool": { 
      "must": [{ 
       "match": { 
       "category": "cat1" 
       } 
      }] 
      } 
     } 
     } 
    } 
    } 

你的過濾器是「查詢」的孩子,而不是「過濾」的孩子。

真的,你不應該使用過濾,它已被否決,see here。你應該改變它爲一個布爾,就像那裏指定的那樣。

+0

我希望查詢失敗,如果有一個額外的孩子或其他錯誤。謝謝。 – italktothewind