可以使用term-level queries根據結構化數據中的精確值查找文檔。結構化數據的值包括日期范圍、IP地址、價格或產品ID。
與全文查詢不同,term-level queries不分析搜索詞。相反,詞條與存儲在字段級別中的術語完全匹配。
詞條搜索(term query)
term 查詢用於查詢指定字段包含某個詞項的文檔
POST /book/_search
{
"query": {
"term" : { "name" : "solr" }
}
}
詞條集合搜索(terms query)
terms 查詢用於查詢指定字段包含某些詞項的文檔
GET /book/_search
{
"query": {
"terms" : { "name" : ["solr", "elasticsearch"]}
}
}
范圍搜索(range query)
gte:大於等於
gt:大於
lte:小於等於
lt:小於
boost:查詢權重:在多條件組合查詢時,可以手動控制每個條件的比重
GET /book/_search
{
"query": {
"range" : {
"price" : {
"gte" : 10,
"lte" : 200,
"boost" : 2.0
}
}
}
}
GET book/_search
{
"query": {
"range" : {
"timestamp" : {
"gte": "18/08/2020",
"lte": "2021",
"format": "dd/MM/yyyy||yyyy"
}
}
}
}
不為空搜索(exists query)
查詢指定字段值不為空的文檔。相當 SQL 中的 column is not null
GET /book/_search
{
"query": {
"exists" : { "field" : "price" }
}
}
詞項前綴搜索(prefix query)
GET /book/_search
{ "query": {
"prefix" : { "name" : "so" }
}
}
正則搜索(regexp query)
regexp允許使用正則表達式進行term查詢.注意regexp如果使用不正確,會給服務器帶來很嚴重的性能壓力。比如.*
開頭的查詢,將會匹配所有的倒排索引中的關鍵字,這幾乎相當於全表掃描,會很慢。因此如果可以的話,最好在使
用正則前,加上匹配的前綴。
GET /book/_search
{
"query": {
"regexp":{
"name": "s.*"
}
}
}
GET /book/_search
{
"query": {
"regexp":{
"name":{
"value":"s.*",
"boost":1.2
}
}
}
}
模糊搜索(fuzzy query)
GET /book/_search
{
"query": {
"fuzzy" : { "name" : "sol" }
}
}
GET /book/_search
{
"query": {
"fuzzy" : { "name" : "so" }
}
}
GET /book/_search
{
"query": {
"fuzzy" : {
"name" : {
"value": "so"
"fuzziness": 2
}
}
}
}
GET /book/_search
{
"query": {
"fuzzy" : {
"name" : {
"value": "sorl"
}
}
}
}
POST /book/_search
{
"query": {
"fuzzy": {
"name": {
"value": "osrl",
"fuzziness":2
}
}
}
}
ids搜索(id集合查詢)
GET /book/_search
{
"query": {
"ids" : {
"values" : ["1", "3"]
}
}
}