弹性搜索接缝,可在全文搜索过程中使用孤立的搜索词对结果进行优先级排序

时间:2020-09-08 21:41:30

标签: elasticsearch

我在使用弹性搜索时遇到问题。它表明搜索字词在搜索结果中是孤立的。

我们有一个大型字幕数据库,该数据库使用Elastic Search进行了索引。 但是,这似乎表明,我们的搜索会优先搜索隔离搜索字词的搜索结果。

即:对“吃”的搜索产生:

哦,跳伞。 //高空跳伞。 //哦,我有那个。 // 进食。 // 饮食饮食。 //刚过去,刚过去。 //你们很烂。 // 那是什么? //花样游泳

AND

这是我的最后一个夜晚,所以我们要过///没有明天的生活。 //-我想我想///- //-带上所有食物,//是否是麦当劳的食品,或者-//冰淇淋。

我们需要INSTEAD对在句子中找到searchTerm的搜索结果进行优先排序,而不是仅仅依靠它本身。

我需要帮助来确定需要修复的内容-映射,过滤器,令牌生成器等。

这是我的设置:

static public function getSettings(){
    return [
        'number_of_shards' => 1,
        'number_of_replicas' => 1,
        'analysis' => [
            'filter' => [
                'filter_stemmer' => [
                    'type' => 'stemmer',
                    'language' => 'english'
                ]
            ],
            'analyzer' => [
                'text_analyzer' => [
                    'type' => 'custom',
                    "stopwords" => [],
                    'filter' => ['lowercase', 'filter_stemmer','stemmer'],
                    'tokenizer' => 'standard'
                ],
            ]
        ]
    ];
}

这是我的映射:

https://gist.github.com/firecentaur/d0e1e196f7fddbb4d02935bec5592009

这是我的搜索

https://gist.github.com/firecentaur/5ac97bbd8eb02c406d6eecf867afc13c

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

此行为必须由TL / IDF算法引起。 如果查询与字段匹配,则查询字段中的单词很少时,它将变得更加重要。 如果您想使它适应您的用例,则可以使用function_score查询。 这篇文章应该可以帮助您找到解决方案。

How can I boost the field length norm in elasticsearch function score?