2016-08-05 98 views
0

我想知道如何结束第一个查询失败,而第二个匹配。字段可搜索但不可过滤

这不符合

{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "and": [ 
      { 
      "terms": { 
       "registration_references": ["impedit-40aa"] 
      } 
      }, 
      {"term": {"is_deleted": false}} 
     ] 
     } 
    } 
    } 
} 

这符合

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "match": {"registration_references": "impedit-40aa"} 
     }, 
     "filter": {"term": {"is_deleted": false}} 
    } 
    } 
} 

你有什么遗漏的线索?

+1

第一个使用“术语”查询(即输入未分析的地方),而第二个使用“匹配”查询(即分析输入的地方)。这很可能是'registration_references'字段是一个分析字符串,对吧? – Val

+2

impedit-40aa将由默认分析器分隔,以便通过精确值匹配40aa过滤器匹配并且不会找到。只是为了理解尝试通过使用过滤器的impedit进行搜索。如果您必须使用过滤器匹配确切值,请更改字段的分析以便不被分析 –

+0

@Val,正确。问题在于'registration_references'被分析。 @Waldemar确切。没有连字符,它可以工作。谢谢你们 ! –

回答

0

由于Val和Waldemar,registration_references字段被分析,这打破了准确的术语匹配。