1. 程式人生 > 實用技巧 >Elasticsearch-查詢

Elasticsearch-查詢

想找到所有title欄位以cri開始的文件

{
    "query":{
        "prefix":{
            "title":"cri"
        }
    }
}

使用者向搜尋框中輸入單詞crme,而不是crime,執行模糊查詢的最簡單形式

{
    "query":{
        "fuzzy":{
            "title":"crme"
        }
    }
}

萬用字元查詢允許我們在查詢值中使用*和?等萬用字元。此外,萬用字元查詢跟詞條查詢在內容方面非常類似。可以傳送一下查詢,來匹配所有包含cr?me詞條的文件,這裡?表示任意字元:

{
    "query":{
        "wildcard":{
            "title":"cr?me"
        }
    }
}

範圍查新,要找到year欄位從1700到1900的所有圖書,可以執行以下查詢:

{
    "query":{
        "range":{
            "year":{
                "gte":1700,
                "lte":1900
            }
        }
    }
}
 gte:範圍查詢將匹配欄位值大於或等於此引數值的文件。
 gt:範圍查詢將匹配欄位值大於此引數值的文件。
 lte:範圍查詢將匹配欄位值小於或等於此引數值的文件。
 lt:範圍查詢將匹配欄位值小於此引數值的文件。

正則表示式查詢示例如下所示:

{
    "query":{
        "regexp":{
            "title":{
                "value":"cr.m[ae]",
                "boost":10
            }
        }
    }
}

假設我們想要找到所有這樣的文件:在title欄位中含有crime詞條,並且year欄位可以在也可以不在1900~2000的範圍裡,在otitle欄位中不可以包含nothing詞條。用布林查詢的話,類似於下面的程式碼:

{
    "query":{
        "bool":{
            "must":{
                "term":{
                    "title":"crime"
                }
            },
            "should":{
                "range":{
                    "year":{
                        "from":1900,
                        "to":2000
                    }
                }
            },
            "must_not":{
                "term":{
                    "otitle":"nothing"
                }
            }
        }
    }
}

在title欄位搜尋Catch-22並向其新增過濾器.它返回給定title的所有文件,但結果縮小到僅在1961年出版的書

{
    "query":{
        "match":{
            "title":"Catch-22"
        }
    },
    "post_filter":{
        "term":{
            "year":1961
        }
    }
}