重新翻译为:"PHP语法的ElasticSearch"
P粉176203781
P粉176203781 2023-08-28 15:43:18
0
1
559
<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粉176203781
P粉176203781

全部回复(1)
P粉421119778

在这种情况下,我建议使用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);

这里查看更多操作。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板