重新翻译为:"PHP语法的ElasticSearch"
P粉176203781
P粉176203781 2023-08-28 15:43:18
0
1
396

我是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.titlecontent.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查询中编写它? 提前致谢!

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);

这里查看更多操作。

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!