Elasticsearch常用搜尋

littlexiaoshuishui發表於2020-08-27

URIsearch

GET twitter/_search?q=city:("北京" or "上海") &sort=DOB:desc&_source=city,age,DOB&size=2

twitter:指定索引
q:查詢sql, 欄位:值,如果沒有欄位,就是查詢所有欄位
sort:排序方式, 欄位:desc/asc
_source:返回_source中顯示的欄位,用逗號隔開
size:分頁大小

Lucene中幾種常用的Query

PhraseQuery
GET twitter/_search?q=city:"Shan tou" //shan tou有引號

等效於 Shan and tou,city欄位同時有Shan, tou,並且順序一致

TermQuery
GET twitter/_search?q=city:Shan tou

等效於Shan or tou, city欄位出現Shan或者tou

Request Body Search

全文字查詢

query的類別,match,match_phrase,query_string,simple_query_string

POST twitter/_search
{
 "_source": ["city","age","DOB"], //顯示source欄位
 "from":0,
 "size":5,
 "query": {
 "match": { //類似北京 or 上海
 "city":"北京 上海"
 }
 }
}
POST twitter/_search
{
 "query": {
 "match_phrase": {
 "title":{
 "query":"happy birthday"
 }
 }
 }
}
POST twitter/_search
{
 "query": {
 "query_string": {
 "fields":["city","age","DOB"], //查詢的欄位
 "query": "北京"
 }
 }
}
POST twitter/_search
{
 "query": {
 "simple_query_string": {
 "query": "Ruan Yiming",
 "fields": ["name"],
 "default_operator": "AND"
 }
 }
}

term查詢

Term查詢,對輸入不做分詞。 會將輸入作為一個整體,在倒排索引中查詢準確的詞項,並且使用相關度算分公式為每個包含該詞項的文件進行相關度算分

Term Query / Range Query / Exists Query / Prefix Query /Wildcard Query

GET twitter/_search
{
 "query": {
 "term": {
 "city.keyword": { //最好通過keyword來查詢,因為如果是text,分詞後儲存格式會變化
 "value": "北京"
 }
 }
 }
}
GET twitter/_search
{
 "query": {
 "range": { //範圍
 "age": {
 "gte": 50
 }
 }
 }
}

可以通過 Constant Score 將查詢轉換成⼀個 Filtering,避免算分,並利⽤快取,提⾼效能

GET twitter/_search
{
 "query": {
 "constant_score":{
 "filter": {
 "term": {
 "city.keyword": "北京"
 }  }
 }
 }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章