這裏是我的查詢....彈性查詢返回不正確的結果
{
"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」
感謝您閱讀迄今爲止,我會很感激,如果有人能幫助我弄清楚如何使這項工作。
您已經''提到早孕3' should'與其他更多的條件塊。在這種情況下,「應該」用作dkncourseatarburwood的OR範圍查詢和dkncourseatarwarrnambool匹配。這就是它被退回的原因。 – Richa
你想''dkncourseintakes「:[ 」第三學期3「 ]'作爲強制性條件? – Richa
@Richa:是的,我知道「應該」充當OR,「必須」充當「AND」。所以當我使用「必須」時,爲什麼我得到零結果?是的,我想我需要'dkncourseintakes':[「第三學期3」]作爲強制性條件,但請記住,如果dkncourseintakes包含多個值,例如'dkncourseintakes',這也應該起作用:[「Trimester 1」,「Trimester 3「]' – Slyper