2017-10-28 92 views
1

我正在使用Elasticsearch 5.4.1。這裏是映射:在Elasticsearch請求正文搜索

{ 
    "testi": { 
    "mappings": { 
     "testt": { 
     "properties": { 
      "last": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      }, 
      "name": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

當我使用URI搜索時,我收到結果。另一方面,在使用請求主體搜索期間,在任何情況下都是空的結果。

GET testi/testt/_search 
{ 
    "query" : { 
     "term" : { "name" : "John" } 
    } 
} 

回答

1

夫婦的事情怎麼回事:

  • 對於這兩種lastname,你索引字段本身具有同樣text,然後一個子區爲keyword。這是你的意圖嗎?您希望能夠在原始字段上進行分析/標記化搜索,然後在子字段上進行關鍵字搜索?
  • 如果這是您的意圖,現在您有兩種方法來查詢每個這些字段。例如,name爲您提供了該領域的分析版本(你設計類型與文本意義Elasticsearch施加standard analyzer它,應用小寫過濾器,一些基本的符號化和制止,等)和name.keyword爲您提供了該領域
  • 的不變關鍵字版
  • 因此,您的條款查詢期望您的輸入字符串John匹配您所查詢的字段。由於您在查詢輸入中使用了大寫字母,因此您可能希望使用關鍵字子字段name,因此請嘗試使用"term" : { "name.keyword" : "John" }
  • 至於發生了什麼事到原來的領域,"term" : { "name.keyword" : "john" }應該工作,以及
  • 您所看到的結果_search因爲是剛執行match_all的光演示。如果您確實傳遞了一個基本文本參數,則它正在針對每個文檔中所有字段的拼接執行,因此keywordtext版本都可用