elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

Php 动态弹性搜索查询

Php 动态弹性搜索查询,php,elasticsearch,Php,elasticsearch,我刚刚开始使用elasticsearch,我不确定您如何使用动态搜索查询。目前,我正在使用类似以下内容: $params['body'] = ' { "query": { "multi_match": { "query": "' . $terms . '", "fields": [ "title^1",

我刚刚开始使用elasticsearch,我不确定您如何使用动态搜索查询。目前,我正在使用类似以下内容:

$params['body'] = '
    {
        "query": {
            "multi_match": {
                "query": "' . $terms . '",
                    "fields": [
                    "title^1",
                    "description"
                    ],
                    "minimum_should_match": "70%"
            }
        },
        "highlight": {
            "pre_tags" : ["<b>"],
            "post_tags" : ["</b>"],
            "fields": {
                "description": {
                    "fragment_size": 400
                    },
                    "title": {
                    "number_of_fragments": 0
                    }
                    }
                }
            }
        }';

我只是在PHP中使用了一个简单的if(isset(),以查看术语是否存在,位置是否有一个。如果没有location$\u GET变量,我只是将其设置为null。

布尔查询是查询多个查询的最佳方法之一

curl -XPOST "http://192.168.31.16:9200/appviewx/ro/_search" -d'
{
"query": {
    "bool": {
        "must": [
           {
               "term": {
                  "object": {
                     "value": "ball"
                  }
               }
           },
           {
               "term": {
                  "location": {
                     "value": "state"
                  }
               }
           }
        ]
    }
}
}'
将其放入if块中

curl -XPOST.      "http://192.168.31.16:9200/appviewx/ro/_search"     -d'
{
 "query": {
"bool": {
    "must": [
       {
           "term": {
              "object": {
                 "value": "ball"
              }
           }
       }
    ]
}
}
}"

bool中有三种类型。必须、应该、不得

1) 应该像条件一样工作

2) 必须像
条件一样工作

3) 不得表现得像状态


尽可能多地使用过滤器以提高性能

谢谢你的帮助,我几乎让它工作了,我希望用户能够通过多个字段进行搜索。但是它们是可选的,如果我搜索
对象
(在您的示例中)和
位置
,当前效果很好。但是我希望
位置
是可选的。目前,如果我没有为location提供一个值,而只为
对象传递一个术语
,我将得到
Elasticsearch\Common\Exceptions\BadRequest400Exception
。你认为实现这一目标的正确方法是什么?谢谢你帮我更新我的问题,这是PHP中的问题,请帮我排个队。如果位置字段为空,则表示跳过“必须”中的第二部分。否则就要全面建设。好吧?是的,我理解并将尝试实施,我不确定是否这样做。谢谢
curl -XPOST.      "http://192.168.31.16:9200/appviewx/ro/_search"     -d'
{
 "query": {
"bool": {
    "must": [
       {
           "term": {
              "object": {
                 "value": "ball"
              }
           }
       }
    ]
}
}