Elasticsearch兩種查詢
- url 搜索 e.g.
GET twitter/_search?q=user:kimchy
- DSL查詢語言
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
DSL(Domain Specific Language)
基本語法
GET /_search
{
"query": <query clause>
}
查詢分類
- 根據(jù)目的分類
- 上下文查詢(Query context),簡稱查詢
在上下文查詢語境中,查詢語句會詢問文檔與查詢語句的匹配程度涛癌,此外,它會判斷文檔是否匹配并計算相關(guān)性評分(_score)的值势腮。 - 上下文過濾(Filter context),簡稱過濾
在上下文過濾語境中漫仆,查詢語句主要解決文檔是否匹配的問題捎拯,而不會在意匹配程度(相關(guān)性評分)。過濾主要用于結(jié)構(gòu)化的數(shù)據(jù)盲厌。
- 上下文查詢(Query context),簡稱查詢
- 根據(jù)查詢語句分類
葉子查詢語句 : 用于查詢特殊字段的特殊值署照,例如:match, term, range 等。
復(fù)合查詢語句 : 可以合并其他的葉子查詢或復(fù)合查詢吗浩,從而實現(xiàn)非常復(fù)雜的查詢邏輯建芙。
查詢語法
1. 全文查詢
GET /_search
{
"query" : {
"match" : {
"full_name" : "John Smith"
},
"multi_match": {
"query": "John Smith",
"fields": ["first_name", "full_name"]
}
}
}
- match: 查詢可操作文本、數(shù)值和日期類型的數(shù)據(jù)懂扼,分析它們并構(gòu)建查詢語句禁荸。
- match_phrase: 即短語(詞組)匹配,它會分析提供的查詢文本并構(gòu)建一個 phrase 查詢阀湿。
- match_phrase_prefix: 和 match_phrase 類似赶熟,但 match_phrase_prefix 不是精準(zhǔn)匹配,而是前綴匹配陷嘴,它會對查詢文本的最后一個字符后的內(nèi)容進(jìn)行通配符搜索映砖。
- multi_match: 用于多字段匹配查詢。
2. Term-level 查詢
Term-level 查詢是直接查詢倒排索引中的確切的值灾挨。
Term-level 查詢通常用于結(jié)構(gòu)化的數(shù)據(jù)邑退,如數(shù)值竹宋、日期、枚舉值或關(guān)鍵字地技,而不是文本(text)
POST /_search
{
"query": {
"term" : { "first_name" : "john" } ,
"terms" : { "full_name" : ["john", "john2"] },
"range" : {
"info.age" : {
"gte" : 28,
"lt" : 60,
"boost" : 2.0
}
},
"wildcard" : { "full_name" : "john*" },
"regexp" : { "full_name" : "jo.*" },
"type" : {
"value" : "user"
}
}
}
- term 用于查詢指定字段的倒排索引包含某個確切值的記錄逝撬。
- terms 和 term 類似,只不過提供的確切的值是數(shù)組乓土。類似于 MySQL 的 in 條件。
- range 用于范圍查詢溯警。
- exists 返回字段值不為 null 的記錄趣苏。
- prefix 返回字段的 term 以確切的前綴(前綴不會被分析)開頭的記錄。
- wildcard 指的是通配符查詢梯轻。支持的通配符主要有:(* 匹配 0 個或多個任意字符, ? 匹配 1 個任意字符)
- regexp 指的是正則查詢食磕。
- fuzzy 指的是容差查詢,即可以容忍確切的值和倒排索引中的 term 之間有誤差喳挑。
- type 查詢指的是根據(jù)文檔的 type 來查詢彬伦。
- ids 查詢指的是根據(jù)文檔的 id 來查詢。
3. 復(fù)合查詢
GET /_search
{
"query": {
"constant_score" : {
"filter" : {
"term" : { "full_name" : "john"}
},
"boost" : 1.5
}
}
}
- constant_score 復(fù)合查詢只會在過濾上下文中執(zhí)行查詢語句伊诵,并且返回的所有的記錄的 _score 值是一個常量单绑。
- bool 復(fù)合查詢用于組合葉子查詢語句或復(fù)合查詢語句。如:must, should, must_not, or filter曹宴。
- must 必須匹配搂橙。
- should 至少匹配一個文檔。
- filter 必須匹配笛坦,忽略相關(guān)性評分区转。
- must_not 必須不匹配,忽略相關(guān)性評分版扩。
- 說明: must 和 should 在查詢上下文中執(zhí)行废离;must_not 和 filter 在過濾上下文中執(zhí)行。
POST /_search
{
"query": {
"bool" : {
"must" : {
"term" : { "last_name" : "smith" }
},
"filter": {
"term" : { "info.interests" : "musics" }
},
"must_not" : {
"range" : {
"info.age" : { "gte" : 10, "lte" : 25 }
}
},
"should" : [
{ "term" : { "full_name" : "john" } },
{ "term" : { "full_name" : "smith" } }
],
"minimum_should_match" : 1,
"boost" : 2.0
}
}
參考:https://blog.csdn.net/lamp_yang_3533/article/details/97618687