首頁  >  問答  >  主體

重新翻譯為:"PHP語法的ElasticSearch"

<p>我是ElasticSearch的新手,對查詢的工作原理不太了解... 我的索引範例</p>
{
  “_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,
    “_用戶” :[ ]
  }
}</pre>

我想查詢文字文字以符合欄位content.titlecontent.short_text,透過_users欄位查詢使用者。例如,我的函數是:</p>

公用靜態函式search(
        字串 $text = '',
        整數$用戶= 0
    ): 大批
    {
        嘗試 {
            $model = new someModelClass();
            $字段= [
                '內容.標題',
                '內容.short_text',
            ];
            $結果 = $model::find()->query( [
                '布爾' => [
                    '應該' => [
                        '多匹配' => [
                            '查詢' => $文本,
                            '字段' => $字段,
                        ],
                    ],
                    '過濾器' => [
                        [ '術語' => [ '_users.id' => $用戶]],
                        [ '術語' => [ '_users' => [] ] ],
                    ]
                ],
            ] )->全部();

            回傳$結果;
        }
        捕獲(異常$e){
            拋出新的例外( $e->getMessage() );
        }
    }</pre>
<p>將其轉換為 SQL 應該是這樣的:<code>SELECT * FROM 'indexing001' WHERE (content.title LIKE %search% OR content.short_text LIKE %search%) AND (users.id = 1 OR使用者= '')</code>
如何在ElasticSearch查詢中編寫它?
提前致謝!</p>
P粉176203781P粉176203781390 天前446

全部回覆(1)我來回復

  • P粉421119778

    P粉4211197782023-08-29 00:46:01

    在這種情況下,我建議使用Elasticsearch-PHP客戶端。

    請使用composer 安裝適當的客戶端。

    對於以下的符合查詢

    curl -XGET 'localhost:9200/my_index/_search' -d '{
        "query" : {
            "match" : {
                "testField" : "abc"
            }
        }
    }'

    您可以在您的PHP腳本中進行查詢,如下所示

    $params = [
        'index' => 'my_index',
        'body'  => [
            'query' => [
                'match' => [
                    'testField' => 'abc'
                ]
            ]
        ]
    ];
    
    $results = $client->search($params);
    

    這裡查看更多操作。

    回覆
    0
  • 取消回覆