首页  >  问答  >  正文

重新翻译为:"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 天前447

全部回复(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
  • 取消回复