2014-03-31 40 views
0

我正嘗試在包含3M文檔的Elasticsearch索引上使用過濾後的查詢,但似乎無法像我期望的那樣使其工作。Elasticsearch過濾的查詢結果令人困惑

爲了詳細說明,我的查詢看起來像這樣(我的指標是大學課程信息):

{ 
    "query":{ 
    "filtered":{ 
     "query":{ 
     "match_phrase_prefix":{ 
      "course_abbreviation":"CS 3" 
     } 
     }, 
     "filter":{ 
     "term":{ 
      "department_id":49599 
     } 
     } 
    } 
    } 
} 

這不會產生任何結果。但是,如果我給出一個完整的「course_abbreviation」(例如:CS 301),我會得到一個結果。

爲了進一步添加到我的困惑,如果我做了以下查詢:

{ 
    "query":{ 
    "match_phrase_prefix":{ 
     "course_abbreviation": "CS 3" 
    } 
    } 
} 

我拿到那有我需要的部門標識(以及與其他department_ids文檔)多個文檔,並且還搭配course_abbreviations如「CS 301」,「CS 322」,「CS 365」等。

我錯了,期望我的篩選查詢會產生與非篩選查詢相同的文檔sans文檔與其他department_ids?

+0

起初,我想你可能需要一個關鍵字分析儀適用於這一領域 – Tim

+0

所以,如果我用一個「關鍵詞」分析(用小寫的過濾器沿 - [開始與 - 詞組匹配](http://www.elasticsearch.org/blog/starts-with-phrase-matching/)),我會得到更好的結果。然而,當我提供一個department_id過濾器時,我還想要一個匹配短語查詢「3」給我300個關卡課程;這在我使用這種類型的方法時不起作用。謝謝。 – bpaulsen1980

+0

在過去,我用布爾或過濾器做這種事情。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html/ http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/ query-dsl-and-filter.html ......很多方法 – Tim

回答

0

很難完全確定沒有捲曲娛樂(http://www.elasticsearch.org/help)時發生了什麼,但基於評論,它聽起來像是應該使用edgengram分析器。這適用於數據任何部分中的術語的部分匹配。

我的經驗是,最好只在索引時應用edgengram擴展(即在你的index_analyzer中)。搜索方面,您只需傳遞條款並嘗試匹配查詢。

問候