ElasticSearch使用运算符AND和OR过滤查询

时间:2017-07-25 15:19:13

标签: json elasticsearch

我正在介入一个与弹性搜索服务器交互的现有应用程序,我看到一些奇怪的回应,可能是因为我不熟悉弹性。

我的索引项目如下:

"_id": "59773d268770541557000012",
        "_score": 0.03282923,
        "_source": {
           "_id": "59773d268770541557000012",
           "active": null,
           "address": "dummy address",
           "center_ids": [],
           "consultation_site_ids": [],
           "coordinates": null,
           "created_at": "2017-07-25T14:44:22.270+02:00",
           "death_declaration_form_step_id": "56ddb086f0e0103b44000000",
           "end_of_pregnancy_form_step_id": "56c34e63f0e0105e65000000",
           "fax": "06.95.40.58.84",
           "form_step_ids": [
              "55361b215342491667030000",
              "5541f16252f131f6a125a375",
              "55361ba05342491667040000",
              "553610835342491667010000",
              "55361d225342491667050000",
              "5541f34a52f131f6a125a377"
           ],
           "hospital_id": "57c004905c5393772c002a62",
           "name": "test site d'encronologie",
           "phone": "06.95.40.58.84",
           "short_name": "test site d'encronologie d'endcronologie",
           "sites_union_ids": [],
           "state": "active",
           "updated_at": "2017-07-25T14:44:22.270+02:00",
           "url": "http://www.testurl.com",
           "user_ids": [],
           "warnings_threshold": null,
           "_type": "Site

我正在使用此查询查询服务器:

 "query":{  
  "filtered":{  
     "query":{  
        "bool":{  
           "should":[  
              {  
                 "multi_match":{  
                    "fields":[  
                       "name^5",
                       "name.edge^1",
                       "name.full^0.3"
                    ],
                    "query":"enc",
                    "type":"cross_fields"
                 }
              },
              {  
                 "match":{  
                    "name":{  
                       "query":"enc",
                       "type":"phrase_prefix",
                       "operator":"or"
                    }
                 }
              },
              {  
                 "match":{  
                    "name":{  
                       "query":"enc",
                       "type":"boolean",
                       "boost":5
                    }
                 }
              }
           ]
        }
     },
     "filter":{  
        "and":[  
           {  
              "term":{  
                 "hospital_id":"57c004905c5393772c002a62"
              }
           },
           {  
              "term":{  
                 "state":"active"
              }
           }
        ]
     }
  }
}}

什么都不返回(没有点击)

另一方面,如果我将过滤器操作符“AND”更改为“OR”,我会收到我的1次点击。

我在谈论“过滤器”分支上的“和”:

    "filter":{  
            "and":[

我真的不明白为什么OR工作但不是AND?

然后当我在第一个分支的所有查询{}中将我的查询词从“enc”更改为“zzz_enc”时 WHILE保持“OR”我没有匹配,即使过滤条件hospital_id和州在我的项目上都是正确的。

为什么过滤器操作符的行为如下?

提前谢谢你。

0 个答案:

没有答案