Thinkphp使用Elasticsearch查詢

在Thinkphp中調用ES,如果自己手寫json格式的query肯定是很麻煩的。我這里使用的是ONGR ElasticsearchDSL 構建 ES 查詢。ongr ElasticsearchDSL 的開源項目地址:GitHub - ongr-io/ElasticsearchDSL: Query DSL library for Elasticsearch。ONGR ElasticsearchDSL 提供了一種更靈活、更易于維護的 Elasticsearch 查詢構建方式,將復雜的 API 操作抽象為簡潔的 DSL 語法。本文將深入探討如何利用 ONGR ElasticsearchDSL 庫構建 ES 查詢,并實現高效、靈活的數據檢索。

安裝 ONGR ElasticsearchDSL 庫:

安裝前要先確認自己的ES版本,一定要選擇ES對應的ElasticsearchDSL 庫,對應版本列表如下:

我們使用composer安裝,在自己的thinkphp項目目錄下修改composer.json添加對應的ElasticsearchDSL 庫版本,然后執行composer命令安裝:

composer require ongr/elasticsearch-dsl

安裝完成后就是在thinkphp項目中使用ElasticsearchDSL?了,示例代碼:

 //根據需要引入對應的包
//引入bool查詢
use ONGR\ElasticsearchDSL\Query\Compound\BoolQuery;
//引入match查詢
use ONGR\ElasticsearchDSL\Query\FullText\MatchQuery;
//引入matchphrase查詢
use ONGR\ElasticsearchDSL\Query\FullText\MatchPhraseQuery;
//引入term條件查詢
use ONGR\ElasticsearchDSL\Query\TermLevel\TermQuery;
//引入多個term條件查詢
use ONGR\ElasticsearchDSL\Query\TermLevel\TermsQuery;
//引入range查詢
use ONGR\ElasticsearchDSL\Query\TermLevel\RangeQuery;
//引入wildcard查詢
use ONGR\ElasticsearchDSL\Query\TermLevel\WildcardQuery;
//引入Search構建搜索
use ONGR\ElasticsearchDSL\Search;
//引入排序字段
use ONGR\ElasticsearchDSL\Sort\FieldSort;//首先創建一個ES搜索實例
$hosts = [['host' => '127.0.0.1', // 必填項'port' => 9200, // 不設置,默認9200,'scheme' => 'http', // 不設置, 默認http'user' => 'elastic','pass' => '123456'
]];
$esClient = ClientBuilder::create()->setHosts($hosts)->build();
//構建一個bool查詢
$boolQuery = new BoolQuery();
//構建一個MatchPhrase查詢,比如搜索title字段含“大模型”的條件
$matchPhraseQuery = new MatchPhraseQuery('title',"大模型",['analyzer'=>'ik_smart']);//這里使用了ik_smart分詞器
//將這個條件加入到搜索中
$boolQuery->add($matchPhraseQuery, 'must');
$search->addQuery($boolQuery); 
//如果要加filter限制條件 可以使用addPostFilter
//比如加上時間范圍限制,創建一個RangeQuery
$lasttime = time()-86400;//24小時前
$filterQuery = new BoolQuery();
$rangeQuery = new RangeQuery('addtime',['gte' => $lasttime]);
$filterQuery->add($rangeQuery, 'must');
//對應search修改為:
$search->addQuery($boolQuery)->addPostFilter($filterQuery); 
//添加排序條件
$sortFields = ['date','_score'];//按時間和評分排序
for($sortFields as $sortField){$fieldSort = new FieldSort($sortField, null, ['order' => FieldSort::DESC])$search->addSort($fieldSort);
}
//設置分頁條件
$search->setFrom(($current_page-1)*$pagesize);
$search->setSize($pagesize);
//構建查詢query
$query = ['index' => $indx_name, //對應的ES索引名稱'body' => $search->toArray(),
];
//執行查詢
$response = $esClient->search($query);
//返回結果集
if ($response['timed_out'] == false) {//轉換結果集合$collection = new Collection(array_column($response['hits']['hits'],'_source'));$total = $response['hits']['total']['value'];
}

上面代碼主要使用?BoolQuery?構建了多條件查詢,使用 ONGR ElasticsearchDSL 庫構建 ES 查詢 更易于閱讀和修改,提高代碼可維護性。

文章地址 :Thinkphp使用ElasticsearchES查詢 – AI小站 (aisites.cn)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24020.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24020.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24020.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

100V 15A TO-252 N溝道MOS管 HC070N10L 惠海

MOS管的工作原理是基于在P型半導體與N型半導體之間形成的PN結,通過改變柵極電壓來調整溝道內載流子的數量,從而改變溝道電阻和源極與漏極之間的電流大小。由于MOS管具有輸入電阻高、噪聲小、功耗低等優點,它們在大規模和超大規模集成電路中得…

package.json中resolutions的使用場景

文章目錄 用途配置示例使用方法注意事項和peerDependencies有什么不同peerDependenciesresolutions 總結 ?創作者:全棧弄潮兒 🏡 個人主頁: 全棧弄潮兒的個人主頁 🏙? 個人社區,歡迎你的加入:全棧弄潮兒的…

git【工具軟件】分布式版本控制工具軟件

一、Git 的介紹 git軟件的作用:管理軟件開發項目中的源代碼文件。 常用功能: 倉庫管理、文件管理、分支管理、標簽管理、遠程操作 功能指令: add,commit,log,branch,tag,remote…

Ubuntu Linux LTS 24.04 AMD64 桌面版安裝記錄

下載iso aria2c -x 4 -s 12 "https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.163.com/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.zju.edu.cn/ubuntu…

[pyradiomics][python]pyradiomics所有whl文件下載地址匯總

源碼地址:https://github.com/AIM-Harvard/pyradiomics pyradiomics是一個開源的Python軟件包,專門用于從醫學影像中提取高通量的定量特征,這些特征被稱為影像組學(Radiomics)特征。以下是關于pyradiomics的詳細介紹: 一、基本概…

華為端云一體化開發 (起步1.0)(HarmonyOS學習第七課)

官方文獻: 為豐富HarmonyOS對云端開發的支持、實現端云聯動,DevEco Studio推出了云開發功能,開發者在創建工程時選擇云開發模板,即可在DevEco Studio內同時完成HarmonyOS應用/元服務的端側與云側開發,體驗端云一體化協…

大數據面試題第二期*6

題1、Namenode掛了怎么辦? 方法一:將SecondaryNameNode中數據拷貝到namenode存儲數據的目錄。 方法二:使用importCheckpoint選項啟動namenode守護進程,從而將SecondaryNameNode中數據拷貝到namenode目錄中。 題2、Hadoop 的namenode 宕機怎么…

論文代碼解讀STPGNN

1.前言 本次代碼文章來自于《2024-AAAI-Spatio-Temporal Pivotal Graph Neural Networks for Traffic Flow Forecasting》,基本模型結構如下圖所示: 文章講解視頻鏈接 代碼開源鏈接 接下來就開始代碼解讀了。 2.代碼解讀 class nconv(nn.Module):de…

NDIS Filter開發-網絡數據的傳輸

和NIC小端口驅動不同的是,無需考慮網絡數據具體是如何傳輸的,只需要針對NBL進行處理即可。Filter驅動程序可以啟動發送請求和接收指示,或“過濾”其他驅動程序的請求和指示。Filter模塊堆疊在微型端口適配器上。 驅動程序堆棧中的Filter模塊…

谷粒商城實戰(033 業務-秒殺功能4-高并發問題解決方案sentinel 1)

Java項目《谷粒商城》架構師級Java項目實戰,對標阿里P6-P7,全網最強 總時長 104:45:00 共408P 此文章包含第326p-第p331的內容 關注的問題 sentinel(哨兵) sentinel來實現熔斷、降級、限流等操作 騰訊開源的tendis&#xff0c…

ctfshow web

【nl】難了 <?php show_source(__FILE__); error_reporting(0); if(strlen($_GET[1])<4){echo shell_exec($_GET[1]); } else{echo "hack!!!"; } ?> //by Firebasky //by Firebasky ?1>nl //先寫個文件 ?1*>b //這樣子會把所有文件名寫在b里…

JSON 無法序列化

JSON 無法序列化通常出現在嘗試將某些類型的數據轉換為 JSON 字符串時&#xff0c;這些數據類型可能包含不可序列化的內容。 JSON 序列化器通常無法處理特定類型的數據&#xff0c;例如日期時間對象、自定義類實例等。在將數據轉換為 JSON 字符串之前&#xff0c;確保所有數據都…

clickhouse學習筆記(三)常見表引擎

目錄 一、 MergeTree系列引擎 1、MergeTree 數據TTL &#xff08;1&#xff09; 列級別 TTL &#xff08;2&#xff09; 表級別 TTL 存儲策略 2、ReplacingMergeTree 3、CollapsingMergeTree 4、VersionedCollapsingMergeTree 5、SummingMergeTree 6、AggregatingMe…

「動態規劃」如何求地下城游戲中,最低初始健康點數是多少?

174. 地下城游戲https://leetcode.cn/problems/dungeon-game/description/ 惡魔們抓住了公主并將她關在了地下城dungeon的右下角。地下城是由m x n個房間組成的二維網格。我們英勇的騎士最初被安置在左上角的房間里&#xff0c;他必須穿過地下城并通過對抗惡魔來拯救公主。騎士…

【Text2SQL 論文】C3:使用 ChatGPT 實現 zero-shot Text2SQL

論文&#xff1a;C3: Zero-shot Text-to-SQL with ChatGPT ???? arXiv:2307.07306&#xff0c;浙大 Code&#xff1a;C3SQL | GitHub 一、論文速讀 使用 ChatGPT 來解決 Text2SQL 任務時&#xff0c;few-shots ICL 的 setting 需要輸入大量的 tokens&#xff0c;這有點昂貴…

基于GLM生成SQL,基于MOSS生成SQL,其中什么是GLM 什么是MOSS

GLM 和 MOSS 是兩種不同的模型或系統&#xff0c;通常用在自然語言處理 (NLP) 和生成任務中&#xff0c;如生成 SQL 查詢。讓我們逐個解釋它們的含義和用途&#xff1a; GLM (Generalized Language Model) GLM 是一種通用語言模型&#xff0c;設計用于處理和生成自然語言。以…

MacOS M系列芯片一鍵配置多個不同版本的JDK

第一步&#xff1a;下載JDK。 官網下載地址&#xff1a;Java Archive | Oracle 選擇自己想要下載的版本&#xff0c;一般來說下載一個jdk8和一個jdk11就夠用了。 M系列芯片選擇這兩個&#xff0c;第一個是壓縮包&#xff0c;第二個是dmg可以安裝的。 第二步&#xff1a;編輯…

eclipse插件開發(二)RCP第三方庫的引入方式

RCP第三方庫的引入 最近在RCP開發過程中遇到JSON串與對象互轉的問題&#xff0c;如何像spring開發模式一樣引入第三方庫呢&#xff1f;eclipse插件開發中用到p2庫&#xff0c;但也支持maven庫的引入。關鍵在于.target這個關鍵文件。 .target 文件用于定義一個目標平臺&#x…

民主測評要做些什么?

民主測評&#xff0c;作為一種重要的民主管理工具&#xff0c;旨在通過廣泛征求群眾意見&#xff0c;對特定對象或事項進行客觀、公正的評價。它不僅是推動民主參與、民主監督的重要手段&#xff0c;也是提升治理效能、促進社會和諧的有效途徑。以下將詳細介紹民主測評的主要過…

常見的布局方法及優缺點

頁面布局常用的方法有浮動、定位、flex、grid網格布局、柵格系統布局 浮動&#xff1a; 優點&#xff1a;兼容性好。 缺點&#xff1a;浮動會脫離標準文檔流&#xff0c;因此要清除浮動。我們解決好這個問題即可。 絕對定位 優點&#xff1a;快捷。 缺點&#xff1a;導致子…