Elasticsearch查詢之Term Query示例解析

Term Query

Term Query是一種最基本的查詢方式,它用於在Elasticsearch中查詢一個字段中包含指定關鍵詞的文檔,與MySQL中的等值查詢類似。使用Term Query時,可以對字段進行完全匹配,且區分大小寫。

基本語法

GET /{index}/_search
{
    "query": {
        "term": {
            "{field}": "{value}"
        }
    }
}

其中,{index}表示查詢的索引名稱,{field}表示需要查詢的字段,{value}表示需要匹配的值。

Java代碼寫法

// TODO 省略導入包
import java.io.IOException;
public class TermQueryExample {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        SearchRequest searchRequest = new SearchRequest("my_index");
        // 這裡的searchSourceBuilder 相當於 query:{}
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // query:{term:{"field_name":"field_value"}}
        searchSourceBuilder.query(QueryBuilders.termQuery("field_name", "field_value"));
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(searchSourceBuilder);
        // 執行查詢
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        // TODO: 解析搜索結果
        client.close();
    }
}

Terms-匹配多個值

term查詢隻能用於匹配該屬性的單個值,若想匹配多個值,可以用terms查詢

基本語法

GET /{index}/_search
{
    "query": {
        "terms": {
            "{field}": [
                "{value1}",
                "{value2}",
                "{value3}"
            ]
        }
    }
}

Java寫法

SearchRequest searchRequest = new SearchRequest("index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 註意這裡是使用termsQuery("field",value1,value2)
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field", "value1", "value2", "value3");
searchSourceBuilder.query(termsQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

Term查詢可配置的其他參數

Term Query還有其他的一些設置參數,比如:

  • boost參數:可以為查詢結果設置權重,提高或降低查詢結果的得分,影響查詢結果的排名。
  • case_insensitive參數:設置是否對查詢進行大小寫不敏感的匹配。
  • rewrite參數:控制查詢的rewrite策略,主要用於控制查詢性能,緩存占用等方面。
  • index參數:控制是否在查詢時使用倒排索引,以及使用哪些倒排索引進行查詢。

總結

使用Term Query時需要註意以下幾點:

  • 僅匹配完全匹配的關鍵字。
  • 字段必須是不分詞的。
  • 通常情況下,不需要將關鍵字轉換為小寫字母,因為Term Query不會將關鍵字轉換為小寫字母。

總之,Term Query非常適合用於對某個字段進行精確匹配的場景。如果您想進行模糊匹配或全文搜索,請考慮使用Match Query。

以上就是Elasticsearch查詢之Term Query示例解析的詳細內容,更多關於Elasticsearch Term查詢的資料請關註WalkonNet其它相關文章!

推薦閱讀: