2017-06-01 83 views
0

我有這個彈性查詢無法返回所需的結果爲terms.letter_score。我確定索引中有可用的匹配項。此查詢(不包括letter_score)會返回預期的過濾結果,但不包含letter_score。唯一的區別是(據我所知),是cat_id值是整數與字符串的列表。任何想法可能是這裏的問題?我基本上試圖讓它匹配letter_score列表中的任何值。條款查詢不返回結果的字符串列表

感謝

{ 
    "size": 10, 
    "query": { 
     "bool": { 
     "filter": [ 
      { 
       "terms": { 
        "cat_id": [ 
        1, 
        2, 
        4 
        ] 
       } 
      }, 
      { 
       "terms": { 
        "letter_score": [ 
        "A", 
        "B", 
        "E" 
        ] 
       } 
      } 
     ] 
     } 
    } 
} 

回答

1

這聽起來像你letter_scoretext型的,因此進行了分析,所以令牌ABE已經被存儲爲abe所以terms查詢將不匹配它們。

此外,如果是這樣的話,概率是高的令牌a已在索引時間被忽略,因爲它是一個停用詞和standard分析器(默認)忽略它們(如果你使用ES 5+)。

第一種方法是使用match查詢,而不是terms,像這樣:

{ 
    "match": { 
     "letter_score": "A B E" 
    } 
} 

如果仍然不工作,我建議你改變你的letter_score領域的映射keyword(需要重新索引您的數據),然後您的查詢將像現在這樣工作