1. term查詢
term查詢是一種精確匹配查詢,它用于查找包含指定術語(term)的文檔。它適用于keyword類型的字段,或者被映射為not_analyzed的字段,這意味著字段的內容不會被分析成單詞。term查詢不會對查詢字符串進行分析,而是將查詢字符串視為一個整體來匹配文檔。
?示例?:
{
"query": {
"term": {
"username.keyword": "john"
}
}
}
- 上述查詢將返回包含
username字段的值為"john"的文檔。
2. match查詢
match查詢是一種全文搜索查詢,它對查詢字符串進行分析,并根據分析結果匹配文檔。match查詢適用于text類型的字段,它會將查詢字符串分析成單詞,然后在文檔中查找包含這些單詞的文檔。
?示例?:
{
"query": {
"match": {
"message": "quick brown fox"
}
}
}
- 上述查詢將返回包含
message字段的值中包含"quick"、"brown"和"fox"中任意一個或多個的文檔。
區別總結
- ?適用場景?:
term查詢適用于精確匹配,主要用于keyword類型的字段。match查詢適用于全文搜索,主要用于text類型的字段。
- ?分析行為?:
term查詢不會對查詢字符串進行分析,直接匹配整個查詢字符串。match查詢會對查詢字符串進行分析,然后使用分析結果來匹配文檔。
- ?匹配精度?:
term查詢是精確匹配,只有在查詢字符串完全匹配字段值時才會返回文檔。match查詢是根據分析后的單詞匹配,可以匹配字段值中包含查詢單詞的文檔。
在使用ES進行文本搜索時,根據需求選擇合適的查詢類型非常重要。如果需要精確匹配或針對keyword類型的字段進行查詢,可以使用term查詢;如果需要進行全文搜索或對text類型的字段進行查詢,可以使用match查詢。