{ “_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.title
和content.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>
在这种情况下,我建议使用Elasticsearch-PHP客户端。
请使用composer 安装适当的客户端。
对于如下的匹配查询
您可以在您的PHP脚本中进行查询,如下所示
在这里查看更多操作。