2016-12-13 121 views
0

我在ES搜索和操作

name     type 
Thomas Robert King  xyz 
Peter Jacob Junior xyz 
Robert Einstein Jr  abc 
Thomas Jupyin DR  xyz 

下列文件我想所有的地方在一個句子中的羅伯特和托馬斯都匹配的文件,是類型XYZ的。

,我已經創建了目前ES查詢:

http://localhost/index/type/_search/?size=100&pretty=1/ 
{ 
"query": { 
"bool": { 
"must": [ 
{ 
"match": 
{ "name": "Thomas" } 
}, 
{ 
"match": 
{ "name": "Robert" } 
} 
], 
"must_not": [ 
{ 
{ 
"match": 
{ "type": "abc" } 
} 
] 
} 
} 
} 

它是彈性搜索創建和情景正確的方式或者是有一個更好的查詢處理相同的輸出。 我使用ES 2.1 感謝

回答

0

鑑於當前的目標是:讓所有的地方在一個句子裏的羅伯特和托馬斯都相匹配,並且是某某類型的文件,你不應該在ABC使用must_not查詢。如果有其他類型(例如ubv),您的查詢也將獲得與此類型匹配的文檔。

你可以做到這一點查詢:

{ 
    "query": { 
     "bool": { 
      "must": [ 
      { 
       "match": 
       { 
         "name": { 
          "query": "Thomas Robert", 
          "operator": "and" 
         } 
       } 
      }, 
      { 
       "match": 
       { 
        "type": "xyz" 
       } 
      } 
     ] 
     } 
    } 
} 

順便說一句,該條款必須在一個布爾查詢進球查詢。如果你只想要在類型XYZ篩選,你應該使用:

{ 
    "query": { 
     "bool": { 
      "must": [ 
      { 
       "match": 
       { 
         "name": { 
          "query": "Thomas Robert", 
          "operator": "and" 
         } 
       } 
      }], 
      "filter": [ 
       { 
        "match": 
        { 
         "type": "xyz" 
        } 
       } 
      ] 
     } 
    } 
} 

而且請看項級查詢與全文查詢,看看你真正需要的。如果未分析「類型」字段,則應使用詞語查詢而不是匹配,以避免在匹配查詢中進行分析。

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/term-level-queries.html

+0

第二查詢表示,其一個無效的JSON,因爲一些失蹤括號,你可以讓我知道什麼,我再次失蹤 – baiduXiu

+0

感謝,這是有益的 – baiduXiu