我正在对使用FOS Elastica的存储库进行单元测试,我想知道是否有人知道如何获取查询的字符串版本,而不是数组形式。这是我的存储库方法:
/**
* Creates query object by either first or last name, with given parameters
*
* @param $name
*
* @param array $params
*
* @return Query
*/
public function findByFirstOrLast($name, array $params)
{
$queryString = new QueryString();
$queryString->setQuery($name);
$queryString->setFields(array('firstName', 'lastName'));
$query = new Query();
$query->setQuery($queryString);
$query->setSort(array($params['sort'] => array('order' => $params['direction'])));
return $query;
}
假设$name = 'foo';
(我正在对id进行排序),我相信相应的FOS Elastica查询应该是
{
"query":
{
"query_string":
{
"query":
"foo",
"fields":["firstName","lastName"]
}
},
"sort":
{
"id":
{
"order":"asc"
}
}
}
有谁知道如何获取查询的json-string表示?它不一定必须是这种漂亮的格式,它可以是一行字符串。
答案 0 :(得分:14)
我看到你不再使用它,但我最终需要同样的东西。
在返回$ query之前,您可以使用json_encode($ query-> getQuery() - > toArray()),这应该可以为您提供单行字符串所需的内容。
答案 1 :(得分:1)
不是问题的直接答案,而是非常相关。使用found.no之类的工具来测试弹性搜索查询时,将输出设置为YAML会很有趣,这样您就可以像这样粘贴到found.no编辑器中:
query:
filtered:
query:
multi_match:
query: php
operator: AND
fields:
- field1^30
- field2
- field3
- _all
您可以使用以下功能获得此类输出:
use Elastica\Query;
use Symfony\Component\Yaml\Dumper;
/**
* @param Query $query
* @param bool $asYaml
*/
protected function debugQuery(Query $query, $asYaml = false)
{
echo '<pre>';
$debug = ['query' => $query->getQuery()->toArray()];
if (false === $asYaml) {
echo json_encode($debug, JSON_PRETTY_PRINT);
die();
}
$dumper = new Dumper();
$yaml = $dumper->dump($debug, 100);
echo $yaml;
die();
}
所以你可以选择任何一种格式。