2016-12-13 162 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