我的节点有一个geofield,我的搜索查询应该在一个范围内找到所有节点。
我已经设法在Solr Server上创建了一个带有视图的搜索表单。但是我想自己做这个请求(有我自己的表单和提交方法)。这里有一个D7的解决方案:如何使用搜索API Solr发送自定义Solr查询,但这些解决方案似乎都不能用于D8模块。
我相信一定有这样的事情
$result = SolrSearchService('myServer', 'myIndex')->request(['title' => 'Test']);
但我什么也找不到。
视图生成的搜索页呈现对我的Solr Server的查询,类似
path=/select params={q=(phonm_rendered_item:nintendo^1+tm_title:nintendo^8)&json.nl=flat&pt=48.1371079,11.5753822&d=50&omitHeader=true&fl=ss_search_api_id,ss_search_api_language,score,fts_field_geo_koordinaten__distance:geodist()&start=0&fq=%2Bindex_id:default_solr_index+%2Bhash:ozztjn&fq={!geofilt}&rows=10&sfield=locs_field_geo_koordinaten&wt=json}
显然,有一些参数负责计算距离:
如何使用Search来呈现这样的查询?
发布于 2018-12-06 05:30:23
通过调试,我找到了解决方案:
$index = Index::load('default_solr_index');
/* @var \Drupal\search_api\Query\Query $query */
$query = $index->query();
$query->keys($form_state->getValue("keys"));
$location_options = (array) $query->getOption('search_api_location', []);
$location_options[] = [
'field' => "field_geo_koordinaten",
'lat' => 48.1371079,
'lon' => 11.5753822,
'radius' => 50,
];
$query->setOption('search_api_location', $location_options);
$results = $query->execute();
谢谢你为我指明正确的方向。
https://drupal.stackexchange.com/questions/273619
复制