我是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脚本中进行查询,如下所示
在这里查看更多操作。