【发布时间】:2021-08-02 17:20:30
【问题描述】:
我想通过elasticsearch实现搜索。 我在搜索字段中使用“edge_ngram”。
搜索时我得到不相关的结果(例如,我搜索“abcd”并得到“abc...”结果),所以我想使用“min_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"
}
]
【问题讨论】:
-
问题不在于评分,而在于您编制索引和进行查询的方式。请随时分享您的索引映射和查询,我们将向您展示如何实现您的期望
-
好的,我已经添加了映射和查询。
标签: elasticsearch