任何想法,为什么ElasticSearch对于我执行的所有搜索查询总是返回_score 0?

使用Elastica,我正在做类似的事情:

$elasticaClient= $this->getElasticaClient();
$elasticaIndex  = $elasticaClient->getIndex($this->getIndexName());
$elasticaQuery  = new Elastica\Query\BoolQuery();

$queryAnd = new \Elastica\Query\BoolQuery();
$queryOr = new \Elastica\Query\BoolQuery();

$queryOr->addShould(new \Elastica\Query\Wildcard('search_field1', $keyword));
$queryOr->addShould(new \Elastica\Query\Wildcard('search_field2', $keyword));

$queryAnd->addMust($queryOr);
$elasticaQuery->addFilter($queryAnd);

$mainQuery = new \Elastica\Query();
$mainQuery->setQuery($elasticaQuery);

$elasticaResultSet = $elasticaIndex->search($mainQuery);

我得到了一堆结果,但是即使我输入了可以在存储字段中找到的完整单词(对于完全匹配),这些结果的_score始终为0。

该字段的映射非常简单:
'search_field1' => array(
    'type'              => 'string',
    'include_in_all'    => true,
    'analyzer'          => 'stringLowercase',
),
stringLowercase分析器只是:
'stringLowercase' => array(
    'type'      => 'custom',
    'tokenizer' => 'keyword',
    'filter'    => 'lowercase'
),

而且,即使我尝试增加这两个 Realm 中的任何一个,它似乎也没有任何作用。

有人可以对此有所了解吗?

最佳答案

您是否试图查询像这样嵌套的东西?:

//i.e.
$queryField = new \Elastica\Query\QueryString($query);
$queryField->setDefaultOperator('OR');
$queryBool->addMustNot($queryField);
//then
$queryOr = new \Elastica\Query\Wildcard('search_field1', $keyword);
$queryOr->addShould($queryBool);

08-06 23:21