我正在尝试编写查询以在名为 category1
和 category2
的两列中搜索产品。我正在使用 Elasticsearch php 客户端并尝试使用 match should 查询,但是由于子字符串匹配,这给了我错误的结果。
但我正在寻找与两列上的 OR 操作完全匹配的内容。我是新手,请指导我。
$params['index'] = 'furnit';
$params['type'] = 'products';
$params['body']['query']['bool']['should'] = array(
array('match' => array('category1' => $category->name)),
array('match' => array('category2' => $category->name)),
);
$results = $this->elasticsearch->search($params);
最佳答案
如果您不进行搜索,那么在这种情况下使用 bool 查询并不是在 elasticsearch 中执行此操作的正确方法。当您搜索某些内容时会使用查询,搜索关键字的相关性和匹配文档的分数很重要。
这里可以应用elasticsearch的bool filter来过滤出想要的结果。使用带有查询的过滤器(过滤查询)是正确的方法,因为它排除了所有不匹配的文档,然后您可以使用匹配查询来搜索所需的文档。
这是一个 bool 过滤器的例子
{
"from": 0,
"size": 50,
"sort": [
{
"name" : {
"order": "asc"
}
}
],
"query": {
"filtered": {
"query": {
"match_all" : {}
},
"filter": {
"bool": {
"should": [
{
"term": {
"category1" : "category1"
}
},
{
"term": {
"category2" : "category2"
}
}
]
}
}
}
}
}
您也可以引用文档 ( https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html )
关于php - Elasticsearch 或者匹配查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30691082/