ngram,自定义排序,不相关的结果



我想通过elasticsearch实现搜索。我用的是"edge_ngram">

搜索时,我得到不相关的结果(例如,我搜索"abcd"我得到了"abc…结果),所以我想使用"min_score"过滤器,问题是,如果我使用自定义排序,这个过滤器不起作用;(然后我得到"score": null)的结果。

我必须使最低分数过滤器工作,甚至与自定义的"排序",或使我的"分析器";不会给我不相关的结果(因为&;abcd&;)我想要结果&;abcd*&;

映射:

'search_by' => [
'type' => 'text',
'analyzer' => 'autocomplete'
]

分析仪:

"analysis" => [
"analyzer" => [
"autocomplete" => [
"tokenizer" => "autocomplete",
],
],
"tokenizer" => [
"autocomplete" => [
"type" => "edge_ngram",
"min_gram" => 3,
"max_gram" => 10,
"token_chars" => [
"letter"
]
]
] 
...
]
查询:

"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"search_by": {
"query": "abcd"
}
}
}
]
}
}
],
"must_not": [],
"should": []
}
},
"min_score": 2,
"from": 0,
"size": 24,
"sort": [
{
"order_by": "desc"
}
]

问题是对索引和搜索时间使用相同的分析器。这是一个常见的错误。所以你应该做的就是:

'search_by' => [
'type' => 'text',
'analyzer' => 'autocomplete',
'search_analyzer' => 'standard'        <--- add this
]