簡體   English   中英

喜歡在 Elasticsearch 中搜索

[英]Like search in Elasticsearch

我正在使用 elasticsearch 從 json 文件中過濾和搜索,我是這項技術的新手。 所以我有點困惑如何在elasticsearch中編寫類似查詢。

select * from table_name where 'field_name' like 'a%'

這是mysql查詢。 如何在 Elasticsearch 中編寫此查詢? 我正在使用彈性搜索版本 0.90.7。

如果可能的話,我強烈建議您更新ElasticSearch版本,自0.9.x版本以來發生了重大變化。

這個問題不夠具體,因為ElasticSearch可以通過多種方式實現此功能,並且它們在總體目標上略有不同。 如果要完全復制該SQL查詢,則在這種情況下,請使用通配符查詢或前綴查詢。

使用通配符查詢:

注意:請注意通配符搜索,因為它們很慢。 避免在字符串開頭使用通配符。

GET /my_index/table_name/_search
{
    "query": {
        "wildcard": {
            "field_name": "a*"
        }
    }
}

前綴查詢

GET /my_index/table_name/_search
{
    "query": {
        "prefix": {
            "field_name": "a"
        }
    }
}

部分匹配

注意: 不要盲目使用部分匹配,同時也有極端案例以它的使用,正確使用分析儀幾乎總是更好的。

同樣,此精確查詢將等同於LIKE '%a%' ,同樣,通過正確使用映射和常規查詢搜索可以更好地進行設置!

GET /my_index/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "a"
        }
    }
}

如果您正在閱讀有關以類似查詢類型查詢ES的信息,我建議您閱讀edge-ngrams ,這與根據您要嘗試的操作正確使用映射有關=)

GET /indexName/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "your partial text"
        }
    }
}

您可以使用"type" : "phrase_prefix"為搜索Java代碼中的相同內容添加前綴或"type" : "phrase_prefix"

AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter();
 andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name",
          "your partial text")));

給定“和過濾器”示例,以便您可以在需要時附加其他過濾器。 檢查此以獲取更多詳細信息:

https://www.elastic.co/guide/zh-CN/elasticsearch/guide/current/slop.html

在我寫的查詢下面,這類似於

SELECT * FROM TABLE WHERE api='payment' AND api_v='v1' AND status='200' AND response LIKE '%expired%' AND response LIKE '%token%'

請注意此處的表格 = 文檔

GET/POST 都接受

GET /transactions-d-2021.06.24/_search
{
   "query":{
      "bool":{
         "must":[
            {
               "match":{
                  "api":"payment"
               }
            },
            {
               "match":{
                  "api_v":"v1"
               }
            },
            {
               "match":{
                  "status":"200"
               }
            },
            {
               "wildcard":{
                  "response":"*expired*"
               }
            },
            {
               "wildcard":{
                  "response":"*token*"
               }
            }
         ]
      }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM