我在使用弹性搜索时遇到问题。它表明搜索字词在搜索结果中是孤立的。
我们有一个大型字幕数据库,该数据库使用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
我在做什么错了?
答案 0 :(得分:0)
此行为必须由TL / IDF算法引起。 如果查询与字段匹配,则查询字段中的单词很少时,它将变得更加重要。 如果您想使它适应您的用例,则可以使用function_score查询。 这篇文章应该可以帮助您找到解决方案。
How can I boost the field length norm in elasticsearch function score?