基于布尔字段值提升弹性搜索结果

时间:2013-06-10 17:21:11

标签: php lucene elasticsearch elastica

当“布尔”字段类型为TRUE时,在搜索提升结果的正确方法时,我得到了很多“静态”,大多数结果都是在讨论布尔搜索。

N.B。我们正在使用php elastica库但是如果你只能提供json那么好,我可以从中进行管理。

我有一个包含5个字段的索引,我们有一些内置的提升正在进行中,如您所见:

array(
    'article_id' => array('type' => 'string', 'include_in_all' => FALSE),
    'subject' => array('type' => 'string', 'include_in_all' => TRUE, 'boost' => 8),
    'summary' => array('type' => 'string', 'include_in_all' => TRUE, 'boost' => 5),
    'content' => array('type' => 'string', 'include_in_all' => TRUE, 'boost' => 3),
    'media'  => array('type' => 'boolean', 'include_in_all' => FALSE),
    'pub_date'  => array('type' => 'date', 'include_in_all' => FALSE)
)

我还使用pub_date查询对象上的addShould()方法,通过基于年龄的\Elastica\Query\Bool()字段在各个级别成功提升了结果。

我现在要做的是在media为真的情况下进一步提升结果。

有人可以告诉我如何为media字段添加适当的提升吗?

1 个答案:

答案 0 :(得分:3)

有多种方法可以提升您的搜索结果,请查看this question以了解详情。你的用例看起来很简单,你可以在索引时进行,但我宁愿在查询时这样做,只需在bool query中添加一个should子句,并在需要时给予适当的推动:

{
    "bool" : {
        "must" : {
            ...
        },
        "should" : [
            {
                .....
            },
            {
                "term" : { "media" : "TRUE" }
            }
        ],
    }
}

新子句是可选的,但它会使匹配文档的得分更高。如果有必要,你可以添加一个特定的提升,它的值主要取决于其他条款。