作者:來自 Elastic?Ioana Tagirta
在 Elasticsearch 8.18 和 9.0 中,ES|QL 支持評分、語義搜索以及更多的 match 函數配置選項,還有一個新的 KQL 函數。
使用 ES|QL 搜索
在 Elasticsearch 8.18 和 9.0 中,ES|QL 增加了一系列新功能,包括:
-
支持評分
-
語義搜索
-
更多的 match 函數配置選項
-
一個新的 KQL 函數
在這篇博客中,我們將回顧 8.18 版本的功能以及我們計劃添加到 ES|QL 的其他令人興奮的新功能,進一步加強我們對將 ES|QL 打造成一個現代搜索語言的投資,以滿足你的需求,無論你是在構建一個由 ES|QL 提供支持的搜索應用程序,還是在 Kibana Discover 中分析數據。
介紹評分
在 8.17 版本中,我們增加了使用全文文本函數過濾文檔的功能。如果你不熟悉 ES|QL 中的全文文本過濾,我們建議閱讀我們關于它的原創博客文章。
在 8.18 和 9.0 中,我們引入了對評分的支持,使得能夠根據相關性排序返回文檔。要訪問每個文檔的得分,只需在 ES|QL 查詢中添加元數據 _score
字段:
FROM books METADATA _score
| WHERE match(title, "Shakespeare") OR match(plot, "Shakespeare")
| SORT _score DESC
我們獲取的得分與從等效的 search API 查詢中獲得的得分相同:
GET books/_search
{"query": {"bool": {"should": [{"match": {"title": "Shakespeare"}},{"match": {"title": "Shakespeare"}}]}}
}
全文本搜索函數,如 match、qstr 和 kql 只能在 WHERE 條件中使用,并且是唯一能影響得分的函數。
_score
列不僅可以用于按相關性排序文檔,還可以用于自定義評分公式。在下一個示例中,我們使用得分閾值僅保留最相關的結果,然后根據讀者評分添加得分加成:
FROM books METADATA _score
| WHERE match(title, "Shakespeare") OR match(plot, "Shakespeare")
| WHERE _score > 2 // we remove the documents with low scores
| EVAL new_score = _score + rating/5
| SORT new_score DESC
改進 match 函數
在 ES|QL 中,match 函數僅僅是轉化為一個Query DSL 的 match 查詢。在 8.18 和 9.0 中,我們擴展了 match 函數的功能,包含了當前在 Query DSL 中可用的所有選項。現在,在 ES|QL 中也可以設置常用的 match 選項,如 boost、fuzziness 和 operator:
FROM books METADATA _score
| WHERE match(title, "Dream of the red chamber", { "operator": "AND", "fuzziness": "AUTO", "boost": 0.75 })OR match(plot, "Dream of the read chamber", { "operator": "AND", "boost": 0.25 })
| SORT _score DESC
進入語義搜索
8.18 版本帶來了令人興奮的消息,語義搜索現在正式可用。我們擴展了 match 函數,支持在 semantic_text
字段類型上進行查詢。
在 ES|QL 中,執行語義查詢(semantic query)現在和執行全文查詢一樣簡單,如下例所示:
FROM books METADATA _score
| WHERE semantic_title:"Shakespeare"
| SORT _score DESC
在這個示例中,我們將 semantic_title
設置為使用 semantic_text
字段類型。
將索引字段映射為 semantic_text
就是為語義搜索設置索引所需的全部操作。
查看我們的語義文本搜索教程,了解更多細節。
ES|QL 混合搜索
ES|QL 使得同時進行語義搜索和詞匯搜索變得簡單。根據你的用例,也可以設置不同的加權,優先顯示來自語義搜索或詞匯搜索的結果:
FROM books METADATA _score
| WHERE match(semantic_title, "Shakespeare", { "boost": 0.75 }) OR match(title, "Shakespeare", { "boost": 0.25 })
| SORT _score DESC
從 KQL 過渡
如果你是 Kibana Discover 的長期用戶,并且使用 KQL(Kibana Query Language)來查詢和可視化數據,同時你想嘗試 ES|QL 但不知道從哪里開始,別擔心,我們來幫你!
在 8.18 和 9.0 中,ES|QL 增加了一個新功能,允許你在 ES|QL 中使用 KQL。操作就像這樣簡單:
FROM logs*
| WHERE KQL("http.request.method:GET AND agent.type:filebeat")
ES|QL 已經在 Kibana Discover 中可用。
這樣,你可以同時享受兩者的優點:你可以繼續使用 KQL,并且可以按自己的節奏開始更熟悉 ES|QL。
查看我們的 ES|QL 入門指南,獲取更多信息。
8.18 和 9.0 及以后版本
在未來的版本中,我們將為 ES|QL 添加越來越多的搜索功能,包括向量搜索、語義重新排序、增強的評分自定義選項,以及結合混合搜索結果的額外方法,例如倒排排名融合(RRF)。
親自嘗試
這些變化從 Elasticsearch 8.18 開始可用,但它們已經可以在 Elasticsearch Serverless 中使用。對于 Elasticsearch Serverless,今天就開始免費的云試用,或者現在就嘗試在本地機器上使用 Elastic!
跟隨《在 ES|QL 中搜索和過濾》教程,親自體驗這篇博客中描述的功能!
Elasticsearch 擁有豐富的新功能,幫助你為你的用例構建最佳的搜索解決方案。深入了解我們的示例筆記本,了解更多內容,開始免費的云試用,或者現在就嘗試在本地機器上使用 Elastic。
原文:ES|QL, you know, for Search - Introducing scoring and semantic search - Elasticsearch Labs