我是ElasticSearch的新手,對查詢的工作原理不太了解... 我的索引範例
{ “_index” :“索引001”, “_type” :“_doc”, “_id” :“3”, “_版本” : 1, “_seq_no” :242, “_primary_term” : 2, “發現” : 真的, “_來源” :{ “類型” : 1, “子類型” : 無效的, “用戶” :{ “id” : 1, “姓名” :“tk6z2 gcnouvqmr” }, “編輯者_用戶” : [ ], “內容” :[ { “標題” :“標題#3”, “短文本” :“第 3 條短文”, “全文” :“第 3 條全文”, “區域設定” :“de-DE” } ], “旗幟” : [ ], “地點” : [ ], “開始日期” : 1658793600, “結束日期” : 1658793600, “_用戶” :[ ] } }
我想查詢文字文字以符合欄位content.title
和content.short_text
,透過_users
欄位查詢使用者。例如,我的函數是:
公用靜態函式search( 字串 $text = '', 整數$用戶= 0 ): 大批 { 嘗試 { $model = new someModelClass(); $字段= [ '內容.標題', '內容.short_text', ]; $結果 = $model::find()->query( [ '布爾' => [ '應該' => [ '多匹配' => [ '查詢' => $文本, '字段' => $字段, ], ], '過濾器' => [ [ '術語' => [ '_users.id' => $用戶]], [ '術語' => [ '_users' => [] ] ], ] ], ] )->全部(); 回傳$結果; } 捕獲(異常$e){ 拋出新的例外( $e->getMessage() ); } }
將其轉換為 SQL 應該是這樣的:SELECT * FROM 'indexing001' WHERE (content.title LIKE %search% OR content.short_text LIKE %search%) AND (users.id = 1 OR使用者= '')
如何在ElasticSearch查詢中編寫它? 提前致謝!
在這種情況下,我建議使用Elasticsearch-PHP客戶端。
請使用composer安裝適當的客戶端。
對於以下的符合查詢
您可以在您的PHP腳本中進行查詢,如下所示
在這裡查看更多操作。