2017-05-30 95 views
0

這裏是我的查詢....彈性查詢返回不正確的結果

{ 
    "size": 100, 
    "query": { 
    "bool": { 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "dkncourseintakes": [ 
        "Trimester 3" 
       ] 
       } 
      }, 
      { 
       "range": { 
       "dkncourseatarcloud": { 
        "lte": "100" 
       } 
       } 
      }, 
      { 
       "range": { 
       "dkncourseatarwaurnponds": { 
        "lte": "100" 
       } 
       } 
      }, 
      { 
       "range": { 
       "dkncourseatarwarrnambool": { 
        "lte": "100" 
       } 
       } 
      }, 
      { 
       "range": { 
       "dkncourseatarburwood": { 
        "lte": "100" 
       } 
       } 
      }, 
      { 
       "range": { 
       "dkncourseatarwaterfront": { 
        "lte": "100" 
       } 
       } 
      } 
      ], 
      "must": [ 
      { 
       "terms": { 
       "dkncoursequal": [ 
        "under_bachelor_degree" 
       ] 
       } 
      } 
      ] 
     } 
     }, 
     "must": [ 
     { 
      "match": { 
      "dkncoursestudent": "Domestic" 
      } 
     }, 
     { 
      "terms": { 
      "dknpagetagia": [ 
       "ia-Business" 
      ] 
      } 
     }, 
     { 
      "terms": { 
      "dkncourselocations": [ 
       "Burwood" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 

一個由該查詢返回的結果是這樣的......正如你可以看到我的查詢顯然課程「孕早期3個搜索「,我很疑惑爲什麼這個課程與」第一學期1「被歸還?

{ 
     "_index": "all_courses", 
     "_type": "courses", 
     "_id": "03c154fe7ee8029472533222340369d43d4fbff5", 
     "_score": 2.030092, 
     "_source": { 
      "dkncoursetype": "Undergraduate", 
      "dkncoursequal": "under_bachelor_degree", 
      "dkncourselocations": "Burwood", 
      "dkncourseatarwarrnambool": 0, 
      "dknpagetagia": "ia-Business,ia-English_and_International_Languages", 
      "dkncourseatarburwood": 65, 
      "dknpagetagfands": "Faculty_of_Arts_and_Education", 
      "dkncourseatarwaterfront": 0, 
      "dkncoursestudent": "Domestic", 
      "dkncourseintakes": "Trimester 1" <=== THIS IS THE PROBLEM 
     } 

如果我改變/從這個

"bool": { 
       "should": [ 
       { 
        "terms": { 
        "dkncourseintakes": [ 
         "Trimester 3" 
        ] 
        } 

調整查詢到該

"bool": { 
      "must": [ 
      { 
       "terms": { 
       "dkncourseintakes": [ 
        "Trimester 3" 
       ] 
       } 
      } 

我沒有得到任何結果。

此外,我使用this插件來生成請求正文。

而且我的查詢看起來像這樣..

var body = bodybuilder() 
        //.filter('terms', 'dkncourseintakes', intake_checkbox_value) 
        .query('match', 'dkncoursestudent', student_radio_value) 
        .query('terms', 'dknpagetagia', interest_checkbox_value) 
        .query('terms', 'dkncourselocations', location_checkbox_value) 
        .filter('terms', 'dkncourseintakes', intake_checkbox_value) 

        .orFilter('range', 'dkncourseatarcloud', {lte: atar_radio_value}) 
        .orFilter('range', 'dkncourseatarwaurnponds', {lte: atar_radio_value}) 
        .orFilter('range', 'dkncourseatarwarrnambool', {lte: atar_radio_value}) 
        .orFilter('range', 'dkncourseatarburwood', {lte: atar_radio_value}) 
        .orFilter('range', 'dkncourseatarwaterfront', {lte: atar_radio_value}) 

       .filter('terms', 'dkncoursequal', qual_checkbox_value) 
        .size(100) 
        .build() 

這裏是我的映射:

{ 
     "settings": { 

      "number_of_shards": "1", 
      "number_of_replicas": "0", 
      "analysis": { 
       "analyzer": { 
        "semi_colon_analyzer": { 
         "type": "pattern", 
         "pattern": ";", 
         "lowercase": false 
        }, 
        "comma_analyzer": { 
         "type": "pattern", 
         "pattern": ",", 
         "lowercase": false 
        } 
       } 

      } 
     }, 
     "mappings": { 
      "test": { 
       "properties": {  
       "dkncoursestudent": { 
         "type": "text" 
        }, 
        "dknpagetagia": { 
         "type": "text", 
         "analyzer": "comma_analyzer", 
         "search_analyzer": "comma_analyzer" 
        },  
        "dkncoursequal": { 
         "type": "text" 
        }, 
        "dkncourseatar": { 
         "type": "integer" 
        }, 
        "dkncourseintakes": { 
         "type": "text", 
         "analyzer": "semi_colon_analyzer", 
         "search_analyzer": "semi_colon_analyzer" 
        }, 
        "dkncourselocations": { 
         "type": "text", 
         "analyzer": "semi_colon_analyzer", 
         "search_analyzer": "semi_colon_analyzer" 
        } 
       } 
      } 
     } 
    } 

我已經定義的自定義分析這3個領域

  • dkncourseintakes(索引像「第三學期1;第三學期2;第三學期3」)
  • dkncourselocations(索引像「Burwood;雲校園「)
  • dknpagetagia(索引像 」IA-業務,IA-英語,IA-人文,IA-法「)

此外,有人可以請告知如何確認自定義分析儀在我的情況下,用於搜索?也就是「semi_colon_analyzer」

感謝您閱讀迄今爲止,我會很感激,如果有人能幫助我弄清楚如何使這項工作。

+0

您已經''提到早孕3' should'與其他更多的條件塊。在這種情況下,「應該」用作dkncourseatarburwood的OR範圍查詢和dkncourseatarwarrnambool匹配。這就是它被退回的原因。 – Richa

+0

你想''dkncourseintakes「:[ 」第三學期3「 ]'作爲強制性條件? – Richa

+0

@Richa:是的,我知道「應該」充當OR,「必須」充當「AND」。所以當我使用「必須」時,爲什麼我得到零結果?是的,我想我需要'dkncourseintakes':[「第三學期3」]作爲強制性條件,但請記住,如果dkncourseintakes包含多個值,例如'dkncourseintakes',這也應該起作用:[「Trimester 1」,「Trimester 3「]' – Slyper

回答

0

沒關係傢伙。活像映射是不正確的....這是這樣的...

"semi_colon_analyzer": { 
         "type": "pattern", 
         "pattern": ";", <=== This was the problem 
         "lowercase": false 
        } 

把它改爲"pattern": "; "(剛剛添加的空間分號之後,現在都好)

+0

我想我們也查看過相同的問題 – Richa

+0

@Richa是的,你說得很對。我的代碼很長,我忽略了這個小空間。 – Slyper