2017-02-21 179 views
0

我Elasticsearch查詢是這樣的:不能過濾搜索結果

array(
    'index' => 'myindex', 
    'type' => 'myindextype', 
    'from' => 0, 
    'size' => 500, 
    'body' => array(
     'query' => array(
      'filtered' => array(
       'filter' => NULL, 
       'query' => array(
        'query_string' => array(
         'default_operator' => 'AND', 
         'query' => 'atm*', 
         'minimum_should_match' => '80%', 
         'default_field' => 'index' 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

結果是這樣的:

array(
    'took' => 6, 
    'timed_out' => false, 
    '_shards' => array(
     'total' => 5, 
     'successful' => 5, 
     'failed' => 0 
    ), 
    'hits' => array(
     'total' => 492, 
     'max_score' => 1, 
     'hits' => array(
      0 => array(
       '_index' => 'myindex', 
       '_type' => 'myindextype', 
       '_id' => 'Branch-571', 
       '_score' => 1, 
       '_source' => array(
        'indexId' => 'Branch-571', 
        'objId' => '571', 
        'index' => 'atm Baki CNaxcivanski lisey Baki sheh Zig shossesi Admiral Naximov kuc 1 ', 
        'type' => 'Branch', 
        'title' => 'Bakı C.Naxçıvanski lisey' 
       ) 
      ), 
      ................................................................................................. 
      196 => array(
       '_index' => 'myindex', 
       '_type' => 'myindextype', 
       '_id' => 'Page-114', 
       '_score' => 1, 
       '_source' => array(
        'indexId' => 'Page-114', 
        'objId' => 'Page-114', 
        'index' => 'atm Baki CNaxcivanski lisey Baki sheh Zig shossesi Admiral Naximov kuc 1 ', 
        'type' => 'Page', 
        'title' => 'Kreditlər' 
       ) 
      ) 
      ................................................................................................. 
     ) 
    ) 
); 

我要過濾結果,並得到結果,其中「類型」 =>「分支',我改變這樣的查詢

array(
    'index' => 'myindex', 
    'type' => 'myindextype', 
    'from' => 0, 
    'size' => 10, 
    'body' => array(
     'query' => array(
      'filtered' => array(
       'filter' => array(
        'bool' => array(
         'must' => array(
          'term' => array(
           'type' => 'Branch' 
          ) 
         ) 
        ) 
       ), 
       'query' => array(
        'query_string' => array(
         'default_operator' => 'AND', 
         'query' => 'atm*', 
         'minimum_should_match' => '80%', 
         'default_field' => 'index' 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

但是這個搜索沒有返回任何東西。

array(
    'took' => 2, 
    'timed_out' => false, 
    '_shards' => array(
     'total' => 5, 
     'successful' => 5, 
     'failed' => 0 
    ), 
    'hits' => array(
     'total' => 0, 
     'max_score' => NULL, 
     'hits' => array() 
    ) 
); 

我認爲查詢是正確的,但不知道爲什麼它沒有得到任何結果。

映射是

array(
    'myindex' => array(
     'mappings' => array(
      'myindextype' => array(
       'properties' => array(
        'index' => array(
         'type' => 'string' 
        ), 
        'indexId' => array(
         'type' => 'string' 
        ), 
        'objId' => array(
         'type' => 'string' 
        ), 
        'title' => array(
         'type' => 'string' 
        ), 
        'type' => array(
         'type' => 'string' 
        ) 
       ) 
      ) 
     ) 
    ) 
) 
+0

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html – user3775217

+0

謝謝@ user3775217。我已經讀過這個。你能告訴我我的錯誤在哪裏嗎? – nagiyevel

+0

我也希望看到你的映射,如果你在「分支」b中使用小寫設置應該更低 – user3775217

回答

1

我已經找到答案自己。搜索查詢必須是這樣的

POST _search 
{ 
    "query": { 
    "bool" : { 
     "must" : { 
     "query_string" :{ 
      "query":"atm*", 
      "default_operator":"AND", 
      "minimum_should_match":"80%", 
      "default_field":"index" 
     } 
     }, 
     "filter": { 
     "term": { 
      "type.keyword": "Branch" 
     } 
     } 
    } 
    } 
} 

現在一切正常。