弹性搜索评分始终为0

时间:2016-12-22 17:32:34

标签: php elasticsearch elastica

任何想法为什么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'
),

此外,即使我尝试提升任何一个字段,它似乎也没有任何影响。

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

1 个答案:

答案 0 :(得分:0)

你试过查询这样嵌套的东西吗?:

//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);